ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

语法制导的语义翻译

2019-12-24 13:57:03  阅读:311  来源: 互联网

标签:F1 val E1 语义 T1 语法 newtemp place 制导


1.语法文法G[E]如下所示: 

E→E+T | E-T | T 

T→T* F | T/F | F 

F→P^ F | P 

P→(E) | i 

  • 要求构造出符合语义分析要求的属性文法描述(主要写生成四元式的部分)。

解:

  E→E1+T1    { E.place:=newtemp; emit ( E.place , ":=" , E1.place'+' , T1.place ) }     ( +, E1.val ,T1.val,E.val )

  E→E1-T1     { E.place:=newtemp; emit ( E.place , ":=" , E1.place'-' , T1.place ) }   ( -, E1.val ,T1.val,E.val )

  E→T1          { E.place:=T1.place;} 

  T→T1* F1    { T.place:=newtemp; emit ( T.place , ":=" , T1.place'*' , F1.place ) }       ( *, T1.val ,F1.val,T.val )

  T→T1/F1     { T.place:=newtemp; emit ( T.place , ":=" , T1.place'/' , F1.place ) }   ( /, T1.val ,F1.val,T.val )

  T→F1        { T.place:=F1.place; }

  F→P1^ F1   { T.place:=newtemp; emit ( F.place , ":=" , P1.place'^' , F1.place ) }  ( ^, P1.val ,F1.val,F.val )

  F→P1        { F.place:=newtemp; emit ( F.place , ":=" , P1.place ) }

  P→(E1)   { P.place:=E1.place }

  P→i    { p:=lookup ( id.name );   if p<>nil then P.place:=i    else error }

 

2.(选做)实验三:语法制导的语义翻译程序

要求:

  • 用算符优先分析法实现如上表达式文法的语法制导翻译过程。
  • 在完成实验二(算符优先语法分析)的基础上,进行语义分析程序设计。
  • 最终输出与测试用例等价的四元式中间代码序列。

  输入:a+b*c,则输出

  (*,b,c,T1)

  (+,a,T1,T2)

  输入:b*(c+b)*d,则输出

  (*,b,c,T1)

  (*,b,d,T2)

  (+,T1,T2,T3)

解:

标签:F1,val,E1,语义,T1,语法,newtemp,place,制导
来源: https://www.cnblogs.com/MRJ1/p/12091071.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有