编译原理课程设计

课程设计内容

1.题目:编译程序构造

2.内容:涉及词法分析、自下而上语法分析程序的实现:SLR1)分析器的实现以及生成中间代码。

3.具体要求

根据LR分析算法构造SLR1)分析程序,并完成语法分析动作(当需要一个单词时,调用词法分析程序获取),同时完成语义分析生成四元式输出。要求程序具有通用性,改变文法时只需改变程序的数据初值,无需改变程序主体;

要求完成一条说明语句、一条算术表达式和赋值语句的翻译,生成中间代码。

变量说明语句的文法及相应的语义子程序:.att表示数据类型属性,fill函数表示将单词id及其类别属性填写符号表。

0S→D;   {acc}

1D→int id     { fill(id,int);D.att=int; }

2D→float id   {fill(id,float); D.att=float;  }

(3)D→D(1),id    { fill(id,D(1).att);D.att=D(1).att; }

 

算术表达式和赋值语句的文法及相应的语义子程序。

1Aid=E      {p=lookup(id.name);

emit=,E.PLACE , _,p;} 

2)E→E(1)+T        {E.PALCE=newtemp();   

emit(+,E(1).PLACET.PLACEE.PLACE)}

3ET           {E.PLACE=T.PLACE;}

4TT(1)*F        {T.PLACE=newtemp();   

emit(+,T(1).PLACEF.PLACET.PLACE)}

5TF     {T.PLACE=F.PLACE;}

6F(E)    { F.PLACE=E.PLACE;}

7Fid     {P=LOOKUP(id.name)

F.PLACE=P;}

构造其用于SLR1)分析的识别活前缀的DFA以及action表和goto表。然后编程实现。(关于词法分析部分只需识别出与此文法相关的单词即可(+*,(,),id=))。

4.程序设计提示:

     1)分析栈设计时可以用一个栈完成,也可以设计三个栈:一个符号栈,一个状态栈,一个语义栈,归约时,则需要在符号栈中退掉n个符号,在状态栈中退掉n个符号(n为产生式符号个数),语义栈中退掉n个符号对应的语义;

     2)终结符表和非终结符表的组织和预测分析程序中相同(将符号对应到一个数字,表示在分析表中对应的下标)。

    3action表中的错误处理:简化的错误处理:当查找action表出现空白时,则当前单词无法移进和规约,可简单的认为当前单词为多余的单词,则抛弃当前单词,读下一单词继续分析。

5.测试数据:

作为程序测试数据,以赋值语句area=r*r+r$作为测试输入(源程序)。程序要求输出二元式序列、符号表、语法分析过程、四元式序列。

假设AA.TXT的文件内容如下:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值