编译原理语法分析—自上而下分析.ppt

编译原理语法分析—自上而下分析.ppt

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

在元符号“→”和“|”的基础上,扩充几个元语言符号:1.用花括号{?}表示闭包运算?*。2.用表示{?}0n可任意重复0次至n次,。3.用方括号[?]表示{?}01,即表示?的出现可有可无(等价于?|?)。引入上述元符号的文法亦称扩充的巴科斯范式。文法的另一种表示法和转换图例如,通常的“实数”可定义为:decimal→[sign]integer.{digit}[exponent]exponent→E[sign]integerinteger→digit{digit}sign→+|-用扩充的巴科斯范式来描述语法,直观易懂,便于表示左递归消去和因子提取。例4.5文法E→T|E+TT→F|T*FF→i|(E)可表示成E→T{+T}T→F{*F}F→i|(E) (4.6)E→T{+T}T→F{*F}F→i|(E) (4.6)可以用语法图来表示语言的文法。T+ETF*TFi)FE(可构造一组递归下降分析程序:PROCEDUREE;BEGINT;WHILESYM=‘+’DOBEGINADVANCE;TENDEND;PROCEDURET;BEGINF;WHILESYM=‘*’DOBEGINADVANCE;FENDEND;PROCEDUREF;同前,见图4.2。4.5预测分析程序一、预测分析程序工作原理预测分析程序或LL(1)分析法:总控程序分析表M[A,a]矩阵,A?VN,a?VT是终结符或‘#’,分析栈STACK用于存放文法符号总控程序分析表X?#输入串分析栈STACKa1a2...ai…#预测分析程序的工作图#Sa1a2...ai…#分析开始时:总控程序根据现行栈顶符号X和当前输入符号a,执行下列三种动作之一:1.若X=a=‘#’,则宣布分析成功,停止分析。2.若X=a?‘#’,则把X从STACK栈顶逐出,让指针指向下一个输入符号。3.若X是一个非终结符,则查看分析表M。若M[X,a]中存放着关于X的一个产生式,把X逐出STACK栈顶,把产生式的右部符号串按反序一一推进STACK栈(若右部符号为?,则意味不推什么东西进栈)。在把产生式的右部符号推进栈的同时应做这个产生式相应的语义动作。若M[X,a]中存放着“出错标志”,则调用出错诊察程序ERROR。预测分析程序的总控程序:BEGIN首先把‘#’然后把文法开始符号推进STACK栈;把第一个输入符号读进a;FLAG:=TRUE;WHILEFLAGDO BEGIN把STACK栈顶符号上托出去并放在X中;IFX?VTTHEN IFX=aTHEN把下一输入符号读进a ELSEERRORELSEIFX=‘#’THEN IFX=aTHENFLAG:=FALSEELSEERRORELSEIFM[X,a]={X→X1X2…Xk}THEN 把Xk,Xk-1,…,X1一一推进STACK栈 /*若X1X2…Xk=?,不推什么进栈*/ELSEERRORENDOFWHILE;STOP/*分析成功,过程完毕*/END例4.6对于文法G(E)E→TE?E?→+TE?|?T→FT?T?→*FT?|?F→(E)|i 输入串为i1*i2+i3,利用分析表进行预测分析:步骤 符号栈 输入串 所用产生式0 #E i1*i2+i3#1 #E?T i1*i2+i3# E→TE?2 #E?T?F i1*i2+i3# T→FT?3 #E?T?i i1*i2+i3# F→i4 #E?T? *i2+i3#5 #E?T?F* *i2+i3# T?→*FT?6 #E?T?Fi2+i3#7 #E?T?ii2+i3#F→i步骤 符号栈 输入串 所用产生8 #E?T?

文档评论(0)

智乾 + 关注
实名认证
内容提供者

科技工作者

1亿VIP精品文档

相关文档