《编译原理(实验部分)》实验9_自底向上算符优先分析法解析.docxVIP

  • 21
  • 0
  • 约8.82千字
  • 约 21页
  • 2018-12-29 发布于湖北
  • 举报

《编译原理(实验部分)》实验9_自底向上算符优先分析法解析.docx

《编译原理》(实验部分) 实验9_自底向上算符优先分析法 一、实验目的 加深对语法分析器工作过程的理解;加强对算符优先分析法实现语法分析程序的掌握;能够采用一种编程语言实现简单的语法分析程序;能够使用自己编写的分析程序对简单的程序段进行语法翻译。 二、实验设备 1、PC 兼容机一台;操作系统为WindowsWindowsXP。 2、Visual C++ 6.0 或以上版本, Windows 2000 或以上版本,汇编工具(在Software 子目录下)。 三、实验原理 先在算符栈置“$”,然后开始顺序扫描表达式,若读来的单词符号是操作数,这直接进操作数栈,然后继续读下一个单词符号。分析过程从头开始,并重复进行;若读来的是运算符θ2 则将当前处于运算符栈顶的运算符θ1的入栈优先数f与θ2的比较优先函数g进行比较。 四、实验步骤 1、定义目标语言的语法规则; 2、求解预测分析方法需要的符号集和分析表; 3、依次读入实验一的分析结果,根据预测分析的方法进行语法分析,直到源程序结束; 4、对遇到的语法错误做出错误处理。 源程序: #include stdio.h #include stdlib.h #include iostream.h char data[20][20]; //算符优先关系 char s[100]; //模拟符号栈s char lable[20]; //文法终极符集 char input[100]; //文法输入符号串 char string[20][10]; //用于输入串的分析 int k; char a; int j; char q; int r; //文法规则个数 int r1; int m,n,N; //转化后文法规则个数 char st[10][30]; //用来存储文法规则 char first[10][10]; //文法非终结符FIRSTVT集 char last[10][10]; //文法非终结符LASTVT集 int fflag[10]={0}; //标志第i个非终结符的FIRSTVT集是否已求出 int lflag[10]={0}; //标志第i个非终结符的LASTVT集是否已求出 int deal(); //对输入串的分析 int zhongjie(char c); //判断字符c是否是终极符 int xiabiao(char c); //求字符c在算符优先关系表中的下标 void out(int j,int k,char *s); //打印s栈 void firstvt(char c); //求非终结符c的FIRSTVT集 void lastvt(char c); //求非终结符c的LASTVT集 void table(); //创建文法优先关系表 void main() { int i,j,k=0; printf(请输入文法规则数:); scanf(%d,r); printf(请输入文法规则:\n); for(i=0;ir;i++) { scanf(%s,st[i]);//存储文法规则,初始化FIRSTVT集和LASTVT集*/ first[i][0]=0; /*first[i][0]和last[i][0]分别表示st[i][0]非终极符的FIRSTVT集和LASTVT集中元素的个数*/ last[i][0]=0; } for(i=0;ir;i++) //判断文法是否合法 {

文档评论(0)

1亿VIP精品文档

相关文档