编译原理总复习.ppt

  1. 1、本文档共44页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

第一章引论begin x:=9; ifx0thenx:=2*x+1/3end语法分析对于文法:G[E]:E-E+T|TT-T*F|FF-i|(E)分析句子i+i*i是否符合文法。输入串i+i*i#的分析过程begin x:=9; ifx0thenx:=2*x+1/3end文法G:(1)程序::=begin语句串end(2)语句串::=语句末语句(3)末语句::=;语句末语句|(4)语句::=赋值语句|if语句(5)赋值语句::=ID:=表达式(6)表达式::=项末项(7)末项::=+项末项|-项末项|项末项|项末项|(8)项::=因子末因子(9)末因子::=*因子末因子|/因子末因子|(10)因子::=ID|NUM|(表达式)(11)if语句::=if表达式then语句编译程序和解释程序编译程序与解释程序区别第三章文法和语言文法:G[S]:S-AB

A-aA|a

B-bB|b以有限的规则描述无限的句子集合。语言文法描述的语言是该文法一切句子的集合。G[S]:S-AB

A-aA|a

B-bB|bL(G)={ambn|m,n≥1}文法的类型通过对产生式施加不同的限制,Chomsky将文法分为四种类型:0型文法:每个产生式左部至少有一个为非终结符。1型文法:产生式右部长于左部,仅仅S→ε除外(上下文有关文法)2型文法:每一个产生式左部是一个非终结符。(上下文无关文法),描述程序设计语言。3型文法:产生式形如A→aB或A→a(正规文法) 或产生式形如A→Ba或A→a每个3型文法都是2型文法,每个2型文法都是1型文法,每个1型文法都是0型文法。句型分析及其语法树语法树描述上下文无关文法的句型推导的直观工具。利用语法树可以判断某文法是否可以推导出某句型或句子。最左推导、最右推导短语、句柄、直接短语二义性文法文法的化简:多余规则,有害规则第四章词法分析begin x:=9; ifx0thenx:=2*x+1/3end按照词法规则构造正规式(正规文法);正规式?NFA(正规文法?NFA);NFA?DFA;DFA最小化;根据DFA构造词法分析程序。正规式和正规文法是等价的

正规式和正规文法与有穷自动机是等价的R?GG?rR?NFANFA?RG?NFANFA?G第五章自上而下语法分析语法分析的任务对于文法:G[E]:E-E+T|TT-T*F|FF-i|(E)分析句子i+i*i是否符合文法。第五章自上而下语法分析要求文法是LL(1)文法。若文法中包含左公共因子或左递归,那么一定不是LL(1)文法。构造预测分析表语法分析3输入串i+i*i#的分析过程第六章自底向上语法分析法自底向上语法分析的思想、实现方式、关键问题基本思想:按一定原则定义文法中所有符号(终结符和非终结符)之间的优先关系,按照这种关系确定归约过程中的句柄并实行归约。是一种规范归约。要求文法是简单优先文法简单优先分析法准确、规范,但效率低,不实用,不流行。基本思想:只定义文法中终结符之间的优先关系(不考虑非终结符),并由这种关系指导分析过程要求文法是算符优先文法不是规范归约算符优先分析法分析速度快,特别适用于表达式的分析。缺点是不规范,常常要采用适当措施克服其缺点。构造算符优先关系表,证明算法优先文法FirstVTLastVT=实际上在算符优先分析过程中,我们每次对栈顶形成的最左素短语进行归约,而不是对句柄进行归约。四种分析表构造LR(0)分析表与SLR(1)分析表不同:SLR(1)分析表对于LR(0)项目集规范族中的归约项目A?α?,只在Follow(A)终结符的对应位置置rj,而LR(0)分析表将所有终结符对应位置均置rj。LR(1)分析表与LALR(1)分析表不同:LR(1)利用First()作为向前搜索符LALR(1)对LR(1)项目集规范族合并同心集,有可能造成新的归约和归约冲突第八章语义分析的任务,主要方法例简单算术表达式求值的属性文法L→E {print(E.val)}E→E1+T {E.val:=E1.val+T.val}E→T {E.val:=T.val}T→T1*digit {T.val:=T1.val*digit.lexval}T→digit {T.val:=digit.lexval}?(0)S′→E{iferror≠1thenprintE.

文档评论(0)

177****7891 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档