《编译原理》课程设计报告.docVIP

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《编译原理》课程设计报告设计题目:pl0编译器设计一、PL0程序的文法及,指令及属性翻译简化c语言文法定义(LL(1)文法) C程序::=void main(){函数体} 函数体::=变量定义部分 语句列 变量定义部分::=变量定义 变量定义部分| ? 变量定义::=int 变量表 变量表::=标识符|标识符,变量表 语句列::=语句 语句列| ? 语句::=条件语句| 循环语句 | 读语句 | 写语句 | 复合语句 | 表达式语句 | 空语句 条件语句::=if(表达式)语句 循环语句::=while(表达式)语句 读语句::=read(变量表); 写语句::=write(表达式表); 复合语句::={语句列}; 表达式语句::=表达式; 空语句::=; 表达式定义(算符优先文法) 表达式::=变量=表达式 | 变量+=表达式 | 变量-=表达式 | 变量*=表达式 | 变量/=表达式 | 变量%=表达式 | 表达式1 表达式1::=表达式1 || 表达式2 | 表达式2 表达式2::=表达式2表达式3 | 表达式3 表达式3::=表达式3==表达式4 | 表达式3!=表达式4 | 表达式3=表达式4 | 表达式3表达式4 | 表达式3=表达式4 | 表达式3表达式4 | 表达式4 表达式::=表达式表达式 | 表达式表达式 | 表达式表达式::=表达式表达式 | 表达式表达式 |表达式表达式 |表达式表达式::=表达式表达式::= | 变量| 常量 PL0文法定义 《程序》::=《分程序》. 《分程序》::=《常量定义》;《常后分程序》|《常后分程序》 《常后分程序》::=《变量定义》;《变后分程序》|《变后分程序》 《变后分程序》::=《过程定义》;《变后分程序》|《语句》 《常量定义》::=const 《常量定义表》 《常量定义表》::=id = number | id = number,《常量定义表》 《变量定义》::= var 《变量表》 《变量表》::=id | id,《变量表》 《过程定义》::=procedure id ;《分程序》 《语句》::=《赋值语句》|《条件语句》|《循环语句》|《读语句》|《写语名》|《复合语句》| 《过程调用语句》|ε 《赋值语句》::=id := 《表达式》 《读语句》::=read(《变量表》) 《写语句》::=write(《表达式表》) 《表达式表》::=《表达式》 | 《表达式》,《表达式表》 《条件语句》::=if 《条件表达式》 then 《语句》 《循环语句》::=while 《条件表达式》 do 《语句》 《复合语句》::=begin 《语句列》 end 《过程调用语句》::=call id 《参量表》::=《有参表》|ε 《有参表》::=《表达式》,《有参表》|《表达式》 《表达式》::=+《表达式1》|-《表达式1》|《表达式1》 《表达式1》::=《表达式1》+《表达式2》|《表达式1》-《表达式2》|《表达式2》 《表达式2》::=《表达式2》*《表达式3》|《表达式2》/《表达式3》| 《表达式2》 mod 《表达式3》|《表达式3》 《表达式3》::=id | number | (《表达式》) 《条件表达式》::=《条件表达式》 or 《条件表达式1》 |《条件表达式1》 《条件表达式1》::=《条件表达式1》 and 《条件表达式2》 | 《条件表达式2》 《条件表达式2》::=not 《条件表达式3》 |《条件表达式3》 《条件表达式3》::=(《条件表达式》)|《关系表达式》 《关系表达式》::=《表达式》《表达式》 《关系表达式》::=《表达式》=《表达式》 《关系表达式》::=《表达式》《表达式》 《关系表达式》::=《表达式》=《表达式》 《关系表达式》::=《表达式》=《表达式》 《关系表达式》::=《表达式》#《表达式》 PL0栈式机指令 指令格式:指令码(f) 所在层数差(l),操作数(a) PL0栈式机指令: LIT: 将常数a取到栈顶 LOD: 将位于(当前层-l)层处的变量a取到栈顶 STO: 将栈顶处值存储到指定位置,l,a同上 CALL 调用当前-l层处的过程a INT: 为调用过程在栈中开辟数据区,a为单元个数 JMP: 无条件转移指令,a目标地址 JPC: 条件转移指令,栈顶值的布尔值为非真时转移到a处,否则执行下面语句 OPR: 关系运算或算术运算 PL0属性翻译 MCONST(const:常量定义开始), VAR(var:变量定义开始), PROCEDURE(procedure:过程定义开始), CALL(call:过程调用语句), BEGIN(begon:复合语句开始), END(end

文档评论(0)

小小紫色星 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档