编译原理实验三逆波兰式生成.docVIP

  • 93
  • 0
  • 约7.8千字
  • 约 11页
  • 2019-03-17 发布于湖北
  • 举报
编译原理程序设计实验报告 ——逆波兰式生成 班级:计算机1306班 姓名:张涛 学号实验目标:在对表达式语法分析的基础上设计实现逆波兰式形式的中间代码生成程序。 实验内容: ⑴概要设计:对表文法加入语义动作形成属性文法,这样在对表达式语法分析的基础上设计实现逆波兰式形式的中间代码生成程序。 ⑵数据结构: int op=0; //当前判断进度 char ch; //当前字符 char nowword[10]=; //当前单词 char operate[4]={+,-,*,/}; //运算符 char bound[2]={(,)}; //界符 struct Token { int code; char ch[10]; }; //Token定义 struct Token tokenlist[50]; //Token数组 struct Token tokentemp; //临时Token变量 ⑶关键函数: int IsLetter(char ch) //判断ch是否为字母 int IsDigit(char ch) //判断ch是否为数字 int Iskey(char *string) //判断是否为关键字 int Isbound(char ch) //判断是否为界符 int Isboundnum(char ch) //给出界符所在token值 void T(); //分析子程序 void F(); //分析子程序 void E1(); //分析子程序 void E(); //分析子程序 void T1(); //分析子程序 (包括:概要设计、数据结构、流程图、关键函数等 有选择填写) 源程序代码:(加入注释) #includestdio.h #includestring.h #includectype.h #includewindows.h int op=0; //当前判断进度 char ch; //当前字符 char nowword[10]=; //当前单词 char operate[4]={+,-,*,/}; char bound[2]={(,)}; struct Token { int code; char ch[10]; }; struct Token tokenlist[50]; void T(); void F(); void E1(); void E(); void T1(); int IsLetter(char ch) //判断ch是否为字母 { int i; for(i=0;i=45;i++) if ((ch=ach=z)||(ch=Ach=Z)) return 1; return 0; } int IsDigit(char ch) //判断ch是否为数字 { int i; for(i=0;i=10;i++) if (ch=0ch=9) return 1; return 0; } int Isbound(char ch) { int i; for(i=0;i2;i++) { if(ch==bound[i]) { return i+1; } } return 0; } int Isoperate(char ch) { int i; for(i=0;i4;i++) { if(ch==operate[i]) { return i+3; } } return 0; } int main() { FILE *fp; int q=0,m=0; char sour[200]= ; printf(请将源文件置于以下位置并按以下方式命名:F:\\2.txt\n); if((fp=fopen(F:\\2.txt,r))==NULL) { printf(文件未找到!\n); } else{ while(!feof(fp)){ if(isspace(ch=fgetc(fp))); else{ sour[q]=ch; q++; } } } int p=0; printf(输入句

文档评论(0)

1亿VIP精品文档

相关文档