PL0源程序-编译原理实验代码

上传人:pu****.1 文档编号:431370522 上传时间:2023-12-13 格式:DOC 页数:18 大小:349.50KB
返回 下载 相关 举报
PL0源程序-编译原理实验代码_第1页
第1页 / 共18页
PL0源程序-编译原理实验代码_第2页
第2页 / 共18页
PL0源程序-编译原理实验代码_第3页
第3页 / 共18页
PL0源程序-编译原理实验代码_第4页
第4页 / 共18页
PL0源程序-编译原理实验代码_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《PL0源程序-编译原理实验代码》由会员分享,可在线阅读,更多相关《PL0源程序-编译原理实验代码(18页珍藏版)》请在金锄头文库上搜索。

1、附件1小组成员:程序清单Main.c#include#include#includevoid error(int n);void getsym();/void enter(enum object k,int *ptx,int lev,int *pdx);int position(char*idt,int tx);int constdeclaration(int *ptx,int lev,int *pdx);int vardeclaration(int *ptx,int lev,int *pdx);int factor(int*ptx,int lev);int term(int *ptx,int

2、 lev);int expression(int *ptx,int lev);int statement(int *ptx,int lev);int block();enum objectconstant,variable,procedure;struct tabchar name14; enum object kind; int val; int level; int adr; int size;table100;enum symbolnul,ident,number,plus,minus,times,slash,oddsym,eql,neq,lss,leq,gtr,geq,lparen,r

3、paren,comma,semicolon,period,becomes,beginsym,endsym,ifsym,thensym,whilesym,writesym,readsym,dosym,callsym,constsym,varsym,procsym,progsym,;enum symbol sym=nul;enum symbol mulop;enum symbol wsym14;enum symbol ssym256;char ch= ;char *str;char word1410=begin,call,const,do,end,if,odd,procedure,program,

4、read,then,var,while,write;/设置保留字名字int num;int lev=0;int tx=0;int k;int *mm;/=(int *)malloc(sizeof(int);char *id,sign14;char a14;FILE *fp1,*fp2,*fp3;void error(int n)switch(n) case 1:printf(常数说明中的=写成了:=。n); break; case 2:printf(常数说明中=后应是数字。n); break; case 3:printf(常数说明中的标识符后应是=。n); break; case 4:prin

5、tf(program,const,var,procedure后应为标识符。n); break; case 5:printf(漏掉了,或;。n); break; case 6:printf(过程说明的符号不正确。n); break; case 7:printf(应该是语句的开始符。n); break; case 8:printf(程序体内语句部分的后跟符不正确。n); break; case 9:printf(程序的结尾丢了句号.。n); break; case 10:printf(语句之间漏了;。n); break; case 11:printf(标识符未说明。n); break; case

6、12:printf(赋值语句中,赋值号左部标识符属性应是变量。n); break; case 13:printf(赋值语句左部标识符后应是赋值号:=。n); break; case 14:printf(call后应为标识符。n); break; case 15:printf(call后标识符属性应为过程。n); break; case 16:printf(条件语句中丢了then。n); break; case 17:printf(丢了end或;。n); break; case 18:printf(while型循环语句中丢了do。n); break; case 19:printf(语句后的符号不

7、正确。n); break; case 20:printf(应为关系运算符。n); break; case 21:printf(表达式内标识符属性不能是过程。n); break; case 22:printf(表达式中漏掉右括号)。n); break; case 23:printf(因子后的非法符号。n); break; case 24:printf(表达式的开始符不能是此符号。n); break; case 25:printf(不能识别的符号。n); break; case 26:printf(程序的层次越界。n); break; case 27:printf(程序应该以program保留字开

8、始。n); break; case 28:printf(程序没有程序主体。n); break; case 31:printf(数越界。n); break; case 32:printf(read语句括号中的标识符不是变量。n); break; case 33:printf(read/write单词后应为左括号。n); break; case 34:printf(read/write语句括号中的标识符应是申明过的变量。n); break; case 35:printf(read/write语句没有右括号。n);void getsym() int i,n=1,l=0; int j,m; do wh

9、ile(ch= |ch=10|ch=9) if(ch=10) n+; ch=fgetc(fp1); if(ch=a&ch=z) /名字或保留字以字母开头 k=0; do if(k=a&ch=0&ch=9);/读取一串字符 ak=0; /字符串最后置结束符 id=a; /单词自身值赋给id for(i=0;i14;i+) for(j=0;j13) sym=ident; /将字符串类别值赋给sym else if(ch=0&ch=0&ch14) num=0; error(31); /数字位数超过14位出错 printf(第%d行出错n,n); k=0; *(id+k)=0; ak=0; else if(ch=:) /检测赋值符号 k=0; ch=fgetc(fp1); *(id+k)=:; ak=:; if(ch=)sym=becomes;k=k+1;*(id+k)=;ak=;ch=fgetc(fp1); else error(25); sym=nul; /不能识别的符号 printf(第%d行出错n,n); else if (ch=) /检测小于或小于等于符号 k=0; ch=fgetc(fp1); *(id+k)=; ak=) /检测大于

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号