算符优先分析法详解
- 格式:pdf
- 大小:155.18 KB
- 文档页数:4
1四川大学计算机学院金军1算符优先分析所谓算符优先分析法就是仿效算术表达式的运算过程而设计的一种语法分析方法;这种方法的关键在于规定算符(终结符)的优先顺序和结合性质。考虑下面的文法:EÆE+E|E-E|E*E|E/E|E↑E|(E)|i这是一个二义文法,有几种不同的规范归约;但是采用关于算符优先顺序和结合规则的规定,并按这种规定归约,那么归约过程就是唯一的。四川大学计算机学院金军2算符优先分析算符优先分析法是一种特别有利于表达式分析,宜于手工实现的语法分析方法。算符优先分析过程是自下而上的归约过程,但未必是严格的最左归约,因此,它不是一种规范归约法。借助于终结符之间的优先关系确定句柄。分析能力不强,仅能对算符优先文法进行分析。工具:优先表、总控程序、栈
四川大学计算机学院金军3算符优先文法现在按照算符优先分析法的设计思路,构造一种文法,通过它可以自动产生终结符的优先关系表。四川大学计算机学院金军4算符优先文法一个文法,如果它的任何产生式的右部都不含两个相继(并列)的非终结符,即不含如下形式的产生式右部:…QR…则我们称该文法为算符文法。在后面的定义中,a、b代表任意终结符;P、Q、R代表任意非终结符;‘…’代表有终结符和非终结符组成的任意序列,包括空字。
四川大学计算机学院金军5算符优先文法假定G是一个不含ε产生式的算符文法。对于任何一对终结符a、b:(1)a=⋅b当且仅当文法G中含有形如P→…ab…或P →…aQb…的产生式;(2)a<⋅b 当且仅当G中含有形如P →…aR…的产生式,R而R⇒+b…或R ⇒+Qb…;(3)a⋅>b 当且仅当G中含有形如P →…Rb…的产生式,R而R⇒+…a或R ⇒+…aQ;如果一个文法G中的任何终结符对(a, b)至多只满足上述三种关系之一,则称G是一个算符优先文法。四川大学计算机学院金军6算符优先文法如果a和b在任何情况下不可能相继出现,则a、b之间无优先关系;注意:优先关系是有序的,要与数学中的‘<’或‘>’区分,a<⋅b不一定意味着b⋅>a。
2四川大学计算机学院金军7算符优先表的构造算符优先表的构造方法:通过检查G的每个产生式的每个候选式,可以首先找出满足a=·b的终结符对;为了找出所有满足关系<·和·>的终结符对,首先需要对G的每个非终结符P构造两个集合:FIRSTVT(P)LASTVT(P)四川大学计算机学院金军8算符优先表的构造FIRSTVT(P) ={a|P⇒+a…或P⇒+Qa…,a∈VT而Q∈VN}LASTVT(P) ={a|P⇒+…a或P⇒+…aQ,a∈VT而Q∈VN}有了这两个集合后,就可以通过检查每个产生式的候选式确定满足关系<·和·>的所有终结符对。
四川大学计算机学院金军9算符优先表的构造假定有产生式的一个候选式形为…aP…,那么,对任何b∈FISTVT(P),a<·b;假定有产生式的一个候选式形为…Pb…,那么,对任何a∈LASTVT(P),a·>b。四川大学计算机学院金军10FIRSTVT和LASTVT集合FIRSTVT(P)的构造:若有产生式P →a…或P →Qa…,则a∈FIRSTVT(P);若a∈FIRSTVT(Q),且有产生式P →Q…,则a∈FIRSTVT(P)。LASTVT(U)的构造:若有产生式U →…a或U →…aV,则a∈LASTVT(U);若a∈LASTVT(V),且有产生式U →…V,则a∈LASTVT(U)。
四川大学计算机学院金军11FIRSTVT构造算法建立一个二维布尔数组F[P, a],使得F[P, a]为真的条件适当且仅当a∈FIRSTVT(P);再用一个栈STACK,把所有初值为真的数组元素F[P, a]的符号对(P, a)全都放到栈中,对栈施加如下操作:如栈不空,弹出栈顶符号对记作(Q, a),查看是否有形如PÆQ…的产生式,若有,且a∈FIRSTVT(P),则将F[P, a]置为真,并把(P, a)入栈;重复上步,直到栈空为止。四川大学计算机学院金军12优先表构造算法有了每个非终结符P的FISTVT(P)和LASTVT(P)之后,就能构造文法G的优先表。其算法如下:
3四川大学计算机学院金军13优先表构造算法FOR 每一条产生式P→X1X2…XnFOR i:=1 TO n-1 DOBEGINIF Xi 和Xi+1 均为终结符THEN 置Xi=·Xi+1IF I<=n-2且Xi和Xi+2都为终结符,而Xi+1为非终结符,THEN置Xi=·Xi+2IF Xi为终结符而Xi+1为非终结符THENFOR FISTVT(Xi+1)中的每个a DO置Xi<·aIF Xi为非终结符而Xi+1为终结符THENFOR LASTVT(Xi)中的每个a DO置Xi ·>aEND四川大学计算机学院金军14算符优先表构造举例e·>d=·<·c·>·>b=·<·aedcba例:设文法G的产生式为:SÆaAcBeAÆAb|b BÆdFIRSTVT(S) = {a}FIRSTVT(A) = {b}FIRSTVT(B) = {d}LASTVT(S) = {e}LASTVT(A) = {b}LASTVT(B) = {d}
四川大学计算机学院金军15算符优先分析算法算符优先分析技术的基本思想是通过终结符号之间的优先关系,确定句型的句柄。算符优先分析仅适用于算符优先文法。算符优先分析法中,我们用“最左素短语”这个概念来刻画算符优先文法的“可归约串”。四川大学计算机学院金军16算符优先分析算法素短语是指这样的一个短语,它至少含有一个终结符,并且除它自身外,不再含有更小的素短语。最左素短语是指处于句型最左边的那个素短语。
四川大学计算机学院金军17算符优先分析算法算符优先文法句型(括在两个#号之间)的一般形式:#N1a1N2a2…NnanNn+1#其中每个ai都是终结符,Ni是可有可无的非终结符。四川大学计算机学院金军18算符优先分析算法一个算符优先文法G的任何句型的最左素短语是满足如下条件的最左子串:Njaj…Niai+1aj-1<·ajaj=·aj+1, …, ai-1=·aiai·>ai+1那么,ajNjaj+1…aiNi一定可归约为某终结符。算符优先分析算法就是根据这个最左素短语的定理构造的。
4四川大学计算机学院金军19算符优先分析算法工作原理:对当前句型不断寻找最左素短语进行归约的过程。寻找最左素短语时,首先找到最左素短语的末尾终结符,然后再向前搜索最左素短语的首终结符。使用的数据结构:栈,数组。有关约定:#作为语句括号,视为终结符,其优先级最低。四川大学计算机学院金军20算符优先分析的优缺点优点:算符优先分析法能方便地构造表达式的语法分析器,分析速度也比较快;算符优先分析文法使用的范围比简单文发大的多;缺点:诊查错误的能力较弱,适用的范围小可能会把错误的句子识别正确;某些文法不满足算符优先文法的要求。