编译原理课程设计++++do-while+循环语句的实现-武汉理工..docxVIP

编译原理课程设计++++do-while+循环语句的实现-武汉理工..docx

  1. 1、本文档共12页,可阅读全部内容。
  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文档。上传文档
查看更多
编译原理课程设计do-while循环语句的实现-武汉理工.

DO-WHILE循环语句的翻译程序设计-——(LR方法、输出四元式)1、系统描述通过设计、编制、调试一个DO-WHILE循环语句的语法及语义分析程序,加深对语法及语义分析原理的理解,并实现词法分析程序对单词序列的词法检查和分析。用语法制导完成语义分析,并将形成的中间代码以四元式的形式输出。2 、文法及属性文法的描述2.1 文法的描述 该文法的产生式集合如下所示: Z-do{E}while(T) E-AE E-A A-b op A A-b; T-b op1 b其中do、while、( 、) 、{ 、} 、op、op1 、 ; 和b均为终结符,而Z、A、T、E这些大写字母均为非终结符。op1表示比较运算符,op表示算术运算符,b表示合法标识符。2.2 属性文法的描述 对该文法的属性文法描述如下:Z-do{E}while(T)prinf(if T goto E else goto next) E-AEprint(E.val = A.val·E.val) E-Aprint(E.val = A.val) A-b op Aprint(A= b.Val op A.Val) A-b; A.Val = b; T-b op1 b print(T= b1.Val op1 b2.Val)3 、语法分析方法描述及语法分析表设计3.1语法分析表设计 LR分析表如下: ACTION GOTO状态do{} while()iopop1;#ZETA0S211A02S33S6454S75R3S6R356S9S107S118R2S29S61210R5R5R511S1312R4R4R41413S151414S1615S1716R117S1818R63.2 LR分析方法描述说明LR分析法的规约过程是规范推到的逆过程,所以LR分析过程是一种规范规约的过程。其分析过程为:由文法构造出该文法项目集,再根据项目集构造该文法的DFA,再判断是否有移进-规约和规约-规约冲突,若没有冲突则该文法为LR(0)的,若有冲突则该文法是SLR(1)的,最后可以构造出LR(0)分析表。然后根据LR(0)分析表进行语法分析,分析过程就是进栈和规约的过程。若能规约出开始符S,则语法正确。反之,语法错误。4 、中间代码形式的描述及中间代码序列的结构设计本系统中所采用的中间代码形式是四元式,是一种比较普遍采用的形式。四元式的四个组成成分是:算符op,第一和第二运算对象ARG1和ARG2及运算结果RESULT。运算对象和运算结果有时指用户自己定义的变量,有时指编译程序引进的临时变量。例如a:=b*c+b*d的四元式表示如下:1)(*,b,c,t1)2)(*,b,d,t2)3)(+,t1,t2,t3)4)(:=,t3,-,a)四元式对中间结果的引用必须通过给定的名字,也就是说,四元式的联系是通过临时变量实现的。5、编译系统的概要设计词法分析词法分析程序要做的工作是:从源程序的第一个字符开始,顺序读字符,一次读一个,根据所读进的字符识别各类单词,同时去掉源程序中的空白和注释。词法分析检查的错误主要是挑出源程序中出现的非法符号。所谓非法符号是指不是程序设计语言中允许出现的符号,就像自然语句中的错字。流程图如下:结束符“#”界限符开始到输入流中读下一字符CharChar是什么?初始化标识符和关键字词法分析子程序字母数字运算符无符号数词法分析子程序运算符词法分析子程序界限符词法分析子程序S’-S·语法分析语法分析是编译过程的核心部分。它的任务是在词法分析识别出单词符号串的基础上,分析并判定程序的语法结构是否符合语法规则。流程图如下:输入串#…ci…c1Sp→##┋┋┋┋X[i]S[i]总 控 程 序输出ACTION表GOTO表栈结束其中SP为栈顶指针,S[i]为状态栈,X[i]为文法符号栈。状态转换表内容按关系GOTO[Si,X]=Sj确定,改关系式是指当前栈顶状态为Si遇到当前文法符号为X时应转向状态Sj。X为终结符或非终结符。ACTION[Si,a]规定了栈顶状态为Sj时遇到输入符号c[i]应该执行的动作。动作有以下四种可能:移进:当Sj=GOTO[Si,a]成立,则把Sj移入到文法符号栈。其中i,j表示状态号。规约:当在栈顶形成句柄为b时,则用b归约为相应的非终结符A,即当文法中有A-b的产生式,而b的长度为r,则从状态栈和文法符号栈中自栈顶向下去掉r个符号。并把A移入文法符号栈内,再把满足Sj=GOTO[Si,A]的状态移进状态栈,其中Si为修改指针后的栈顶状态。接受acc:当归约到文法符号栈中只剩下文法的开始符号S时,并且输入符号串已结束即当前输入符是‘#’,则为分析成功。报错:当遇到状态栈顶为某一状态下出现不该遇到的文法符号时,则报错,说明输入串不是该分发能接受的句子。语法制导翻译在语法分析过

文档评论(0)

v4v5v4I + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档