LR1分析器C语言,编译原理-LR语法分析器的控制程序实验报告

《编译原理-LR语法分析器的控制程序实验报告》由会员分享,可在线阅读,更多相关《编译原理-LR语法分析器的控制程序实验报告(3页珍藏版)》请在装配图网上搜索。

1、编译原理 实验报告学 号姓 名时 间专 业班 级实验题目: LR语法分析器的控制程序实验目的:手工模拟控制程序计算,对源程序进行LR语法分析主要是分析表的构造实验内容与步骤:1. 将要进行LR语法分析的源程序和LR语法分析器控制程序放在同一文件夹中。2. 用C语言编写LR语法分析器控制程序,程序代码如下:#include #include #include #include struct code_valchar code;char val20;const char *p=/产生式SE,EE+T,ET,TT*F,TF,F(E),Fi;const char TNT =+*()i#ETF;/LR分。

2、析表列的字符const int M9=/LR分析表数字化,列字符+*()i#ETF用数字012345678标识。 0, 0, 4, 0, 5,0, 1, 2, 3,/0表示出错,s4用4表示。 6, 0, 0, 0, 0,99,/Acc用99表示-2, 7, 0,-2, 0,-2,/r2用-2表示-4,-4, 0,-4, 0,-4, 0, 0, 4, 0, 5, 0, 8, 2, 3,-6,-6, 0,-6, 0,-6, 0, 0, 4, 0, 5, 0, 0, 9, 3, 0, 0, 4, 0, 5, 0, 0, 0,10, 6, 0, 0,11,-1, 7, 0,-1, 0,-1,-3,-。

3、3, 0,-3, 0,-3,-5,-5, 0,-5, 0,-5;int col(char);/列定位函数原型void main()int state50=0;/状态栈初值char symbol50=#;/符号栈初值int top=0;/栈顶指针初值ofstream cout(par_r.txt);/语法分析结果输出至文件par_r.txtifstream cin(lex_r.txt); / lex_r.txt存放词法分析结果,语法分析器从该文件输入数据。struct code_val t;/结构变量,存放单词二元式。cint.codet.val;/读一单词 int action;int i,j。

4、=0;/输出时使用的计数器,并非必要。cout0 & action!=99)/移进state+top=action;symboltop=t.code; cint.codet.val;/读一单词else if(action cendl;exit(0);/终止程序运行3. 查看生成的par_r.txt文件,对文件中的内容进行分析,更深刻理解LR语法分析的分析过程。par_r.txt文件:step状态栈符号栈输入符号0)0#i1)05#i*2)03#F*3)02#T*4)027#T*i5)0275#T*i+6)02710#T*F+7)02#T+8)01#E+9)016#E+i10)0165#E+i#11)0163#E+F#12)0169#E+T#13)01#E#Acc分析与体会:此通过上下文无关文法作为语法分析的基础,配合实例,探讨了编译原理构造中的自上而下语法分析法,并初步完成了语法分析器的实现。手工模拟控制程序计算,对源程序进行LR语法分析通过本次实验,进一步对C语言的知识进行了复习,并编写代码对源程序进行LR语法分析,把其分析后的结果输入并保存到文件par_r.tx中。对LR分析有了更深的理解。LR(0)分析表构造的思想和方法是构造其他LR分析表的基础。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值