www.ypnh.net > 算符文法怎样判断终结符之间的优先关系

算符文法怎样判断终结符之间的优先关系

从供选择的答案中,选出应填入下面叙述中_______内的最确切的解答,把相应编号写在答卷的对应栏内.假设某程序语言的文法如下:S → SaT | T T → TbR | R R → PdR | P P → fSg | e 其中Vr{ a,b,d,e,f,g};Vn={S,T,R,P};S是开始符号,那么,此

分类对于一个算符优先文法,只要能构造出它的算符优先表,就可以利用算符优先分析方法,分析一个句子是否符合这个文法的定义.那么定义FirstVT(P)={a|P(+=>)a或P(+=>)Qa,a属于终结字符集,而Q属于非终结字符集},其中

算符文法:即它的任一产生式的右部都不含两个相继的非终结符的文法.如果G是一个不含空字符的算法文法,那么只要它的任一对终结符都至多只满足>,=,<的关系的其中一种,则称g是一个算符优先文法.< p=><!--的关系的一种,则称g是一个算符优先文法.

一个文法,如果他的任何一个产生式的右部都不包含连个连续的非终结符,那么则称之为算符文法,比如说加减乘除都是算符文法,而算符优先文法就是在算符文法中加上了优先关系,比如说乘除的优先级就大于加减,有三个判断依据:1.P->ab或P->aAb,则a的优先级等于b2.P->aQ,则a的优先级小于Q中所有符号的优先级3.P->Qa,则Q中所有符号的优先级大于a的优先级具体情况看书吧,这里只是大略地讲一下,其实要复杂一些,还要牵扯到算符优先表的构造

首先,算符优先分析法只考虑终结符之间的优先关系.其次,#和其他终结符之间的优先关系按如下方法来确定:1)假设文法的开始符为E,则增加一个产生式E'-> #E#, E'不在原文法中出现2)##

A

将上述算法的对应的(1),(2)分别修改为For 每个形如P-〉…a或P-〉…aQ的产生式,For每条形如P-〉…Q的产生式便可得.假定G是一个不含空字符产生式的算符文法.对于任何一对终结符a,b,(1)a=b,当且仅当G中含有形如P->…ab…或P-

For每条产生式P-〉X1X2…2113Xn DOFor i=1;to n-1 DoBeginIf xi和xi+1 均为终结52614102符1653 内then 置 xi=xi+1If i<=n-2 且 xi 和 xi+2都为终结符但Xi+1为非终结 then 置 xi=xi+1If xi为终结符而xi+1为非终结符 thenFor FirstVt(xi+1)中的每个容a DO置 xi<a;If xi为非终结符而xi+1为终结符 thenFor LastVt(xi)中的每个a DO置 a>xi;END

算符优先分析法比LR分析(规范归约)法的归约速度快.在LR分析一章的语法分析器自动生成工具Yacc中,对算数表达式的归约往往会用到算符优先关系的概念.算符优先分析的缺点是对文法有一定的限制,在实际应用中往往只用于算数表达式的归约.由于算符优先分析不是规范归约,所以可能把不是文法的句子错误的归约成功

相关搜索:

网站地图

All rights reserved Powered by www.ypnh.net

copyright ©right 2010-2021。
www.ypnh.net内容来自网络,如有侵犯请联系客服。zhit325@qq.com