编译原理_实验报告实验二__语法分析(算符优先) 2

编译原理_实验报告实验二__语法分析(算符优先) 2

ID:39623491

大小:552.50 KB

页数:10页

时间:2019-07-07

编译原理_实验报告实验二__语法分析(算符优先) 2_第1页
编译原理_实验报告实验二__语法分析(算符优先) 2_第2页
编译原理_实验报告实验二__语法分析(算符优先) 2_第3页
编译原理_实验报告实验二__语法分析(算符优先) 2_第4页
编译原理_实验报告实验二__语法分析(算符优先) 2_第5页
资源描述:

《编译原理_实验报告实验二__语法分析(算符优先) 2》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、华北水利水电学院编译原理实验报告一、实验题目:语法分析(算符优先分析程序)(1)选择最有代表性的语法分析方法算符优先法;(2)选择对各种常见程序语言都用的语法结构,如赋值语句(尤指表达式)作为分析对象,并且与所选语法分析方法要比较贴切。二、实验内容(1)根据给定文法,先求出FirstVt和LastVt集合,构造算符优先关系表(要求算符优先关系表输出到屏幕或者输出到文件);(2)根据算法和优先关系表分析给定表达式是否是该文法识别的正确的算术表达式(要求输出归约过程)(3)给定表达式文法为:G(E’):E’→#E#E→E+T

2、TT→T*F

3、FF→(E)

4、

5、i(4)分析的句子为:(i+i)*i和i+i)*i三、程序源代#include#include#include#include#defineSIZE128charpriority[6][6];//算符优先关系表数组charinput[SIZE];//存放输入的要进行分析的句子charremain[SIZE];//存放剩余串charAnalyseStack[SIZE];//分析栈voidanalyse();inttestchar(charx);//判断字符X在算符优先关系

6、表中的位置voidremainString();//移进时处理剩余字符串,即去掉剩余字符串第一个字符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]='<';pr

7、iority[1][4]='>';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]='$';pr

8、iority[4][0]='>';priority[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=fope

9、n("li","a");inti,j,f,z,z1,n,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、

20、AnalyseStack[k]=='#')j=k;elsej=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

31、urn;}if(p=='>'){for(;;){Q=AnalyseStack[j];if(AnalyseSt

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。