欢迎来到天天文库
浏览记录
ID:48516292
大小:545.00 KB
页数:15页
时间:2020-02-06
《编译原理_实验报告实验二__语法分析(算符优先)2.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、......华北水利水电学院编译原理实验报告一、实验题目:语法分析(算符优先分析程序)(1)选择最有代表性的语法分析方法算符优先法;(2)选择对各种常见程序语言都用的语法结构,如赋值语句(尤指表达式)作为分析对象,并且与所选语法分析方法要比较贴切。二、实验内容(1)根据给定文法,先求出FirstVt和LastVt集合,构造算符优先关系表(要求算符优先关系表输出到屏幕或者输出到文件);(2)根据算法和优先关系表分析给定表达式是否是该文法识别的正确的算术表达式(要求输出归约过程)(3)给定表达式文法为:G(E’):E’→#E#E→E+T
2、TT→T*F
3、FF→(E)
4、i(4)分析的句
5、子为:(i+i)*i和i+i)*i三、程序源代#include#include#include#include专业.专注.......#defineSIZE128charpriority[6][6];//算符优先关系表数组charinput[SIZE];//存放输入的要进行分析的句子charremain[SIZE];//存放剩余串charAnalyseStack[SIZE];//分析栈voidanalyse();inttestchar(charx);//判断字符X在算符优先关系表中的位置voidr
6、emainString();//移进时处理剩余字符串,即去掉剩余字符串第一个字符intk;voidinit()//构造算符优先关系表,并将其存入数组中{priority[0][0]='>';priority[0][1]='<';priority[0][2]='<';priority[0][3]='<';priority[0][4]='>';priority[0][5]='>';priority[1][0]='>';priority[1][1]='>';priority[1][2]='<';priority[1][3]='<';priority[1][4]='>';专业.专注..
7、.....priority[1][5]='>';priority[2][0]='>';priority[2][1]='>';priority[2][2]='$';//无优先关系的用$表示priority[2][3]='$';priority[2][4]='>';priority[2][5]='>';priority[3][0]='<';priority[3][1]='<';priority[3][2]='<';priority[3][3]='<';priority[3][4]='=';priority[3][5]='$';priority[4][0]='>';priority[
8、4][1]='>';priority[4][2]='$';priority[4][3]='$';priority[4][4]='>';priority[4][5]='>';专业.专注.......priority[5][0]='<';priority[5][1]='<';priority[5][2]='<';priority[5][3]='<';priority[5][4]='$';priority[5][5]='=';}voidanalyse()//对所输入的句子进行算符优先分析过程的函数{FILE*fp;fp=fopen("li","a");inti,j,f,z,z1,n,
9、n1,z2,n2;intcount=0;//操作的步骤数chara;//用于存放正在分析的字符charp,Q,p1,p2;f=strlen(input);//测出数组的长度for(i=0;i<=f;i++){a=input[i];if(i==0)remainString();专业.专注.......if(AnalyseStack[k]=='+'
10、
11、AnalyseStack[k]=='*'
12、
13、AnalyseStack[k]=='i'
14、
15、AnalyseStack[k]=='('
16、
17、AnalyseStack[k]==')'
18、
19、AnalyseStack[k]=='#')j=k;else
20、j=k-1;z=testchar(AnalyseStack[j]);//从优先关系表中查出s[j]和a的优先关系if(a=='+'
21、
22、a=='*'
23、
24、a=='i'
25、
26、a=='('
27、
28、a==')'
29、
30、a=='#')n=testchar(a);else//如果句子含有不是终结符集合里的其它字符,不合法{printf("错误!该句子不是该文法的合法句子!");break;}p=priority[z][n];if(p=='$'){printf("错误!该句子不是该文法的合法句子!");ret
此文档下载收益归作者所有