算符文法.doc

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

算符文法 分类 对于一个算符优先文法,只要能构造出它的算符优先表,就可以利用算符优先分析方法,分析一个句子是否符合这个文法的定义。 那么定义FirstVT(P)={a|P(+=)a···或P(+=)Qa···,a属于终结字符集,而Q属于非终结字符集},其中···表示所有字符集 LastVT(P)={a|P(+=)···a或P(+=)···aQ,a属于终结字符集,而Q属于非终结字符集} 由以下两条规则来构造FirstVT集: (1) 若有产生式P=a···、或P=Qa···,则a属于FirstVT(P); (2) 若有a属于FirstVT(Q),且有产生式P=Q···,则a属于FirstVT(P); 类似的有构造LastVT集的规则: (1) 若有产生式P=···a或P=···aQ,则a属于LastVT集。 (2) 若a属于LastVT(Q),且有产生式P=···Q,则a属于LastVT(P)集。 2构造FirstVT集的算法 Begin For 每个非终结符P和终结符a Do F[P,a]=FALSE; For 每个形如P=a···或P=Qa···的产生式……(1) DO insert(P,a) While Stack 非空 Do Begin 把Stack 的顶项,记为(Q,a),上托出去; For每条形如P=Q···的产生式DO …….(2) Insert(P,a) End of while; END 3构造LastVT集的算法 将上述算法的对应的(1),(2)分别修改为 For 每个形如P-〉…a或P-〉…aQ的产生式, For每条形如P-〉…Q的产生式 便可得。 假定G是一个不含空字符产生式的算符文法。对于任何一对终结符a,b, (1)a=b,当且仅当G中含有形如P-…ab…或P-…aQb…的产生式; (2)ab, 当且仅当G中含有形如P-…aR…的产生式,而R-〉b…或R-Qb…; (3)ab, 当且仅当G中含有形如P-…Rb…的产生式,而R-…a或R-…aQ; 这样再结合上次的FirststVT和LastVT集的概念便可以由文法自动构造出算符优先表。 再定义一个素短语的概念:它至少含有一个终结符,并且,除它自身之外不再含任何更小的素短语,所谓最左素短语就是处于句型最左边的素短语。而一个算符优先文法G的任何句型的最左素短语是满足以下条件的最左子串NaNb…NcNdN(N是非终结符,a,b,c,d是终结符) ab   b=…=c   cd 这样形成一个驼峰结构,当找到这样一个子串的时候,它们优先级相等的一段就可以归约为一个非终结符,否则报错。 因此算符优先文法分析就是找到这样的字串并归约,最终所有终结符都被成功归约为##时表明这个句子符合所定义的文法要求。 4构造优先表的算法 For每条产生式P-〉X1X2…Xn DO For i=1;to n-1 Do Begin If xi和xi+1 均为终结符 then 置 xi=xi+1 If i=n-2 且 xi 和 xi+2都为终结符 但Xi+1为非终结 then 置 xi=xi+1 If xi为终结符而xi+1为非终结符 then For FirstVt(xi+1)中的每个a DO 置 xia; If xi为非终结符而xi+1为终结符 then For LastVt(xi)中的每个a DO 置 axi; END 5算符优先算法 K=1; s[k]=’#’ Repeat 把下一个输入符号读进a中; Ifs[k]属于Vt,then j=k else j=k-1; While s[j] a do Begin Reapeat Q=s[j]; If s[j-1]属于Vt then j=j-1 else j=j-2 Until s[j]Q 把s[j+1]…s[k]归约某个N; K=j+1 S[k]=N End of while If s[j]a or s[j]=a then Begin k=k+1; s[k]=a end Else 出错 UNTIL a=’#’

文档评论(0)

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

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

1亿VIP精品文档

相关文档