简单优先分析法

1、主要思想:

        按照一定原则,求出文法中所有符号(Vt和Vn)之间的优先关系,再依此确定句柄。

2、步骤:

  1. 拓广文法:S' --> #S#
  2. 构造优先关系表
  3. 判断是否为简单优先文法
  4. 根据优先关系表分析句子

优先关系定义:

(1)X=Y:存在产生式A-->...XY...

(2)X<Y:存在产生式A-->...XB...,B有限次推导出Y...

(3)X>Y:存在产生式A-->...BD...,B至少一次推导出...X,D有限次推导出Y...(或者说D-->Y) 

 例:

若有文法G[S]:

S-->bAb

A-->(B

A-->a

B-->Aa)


步骤一:拓广文法:

S'-->#S#         /特殊:#=#,#<右相邻符号,左相邻符号>#

S-->bAb

A-->(B

A-->a

B-->Aa)


步骤二:求优先关系定义:

  • 求=关系:找相邻符号V1V2,有:

        b=A,A=b,(=B,A=a,a=)

  • 求<关系:找VtVn/Vn1Vn2形式(非终结符在后的形式):Vt<first(Vn)、Vn<first(Vn2),有:

        由bA:first(A)=(,a  得:b<(,b<a

        由(B:first(B)=first(A)=a,( 得:(<A,(<a,(<(

        由#特殊性得:#<S,#<b

  • 求>关系:找VnVt/Vn1Vn2(非终结符在前,非终结符/终结符在后的形式),有:

        由Ab: A-->(B,A-->a,B-->Aa): B>b,a>b,)>b

        由Aa: A-->(B,A-->a,B-->Aa): B>a,a>a,)>a

        由#特殊性得:S>#,b>#


步骤三:根据优先关系,构造优先关系矩阵:

优先关系矩阵
SABab()#
S
A==
B>>
a>>=
b=<<
(<=<<
)>>
#=

简单优先文法的定义:

  • 在文法符号集中,任意两个符号之间最多只有一种优先关系
  • 任意两个产生式没有相同的右部      A-->a  B-->a   \bigotimes
  • 不含空产生式   A-->\varepsilon \bigotimes

根据这些判断是否为简单优先分析文法


步骤四:分析句子:

分析输入串#b(aa)b#

步骤符号栈S待输入符号串优先关系动作
1#b(aa)b##<b入栈
2#b(aa)b#b<(入栈
3#b(aa)b#(<a入栈
4#b(aa)b#a>a规约a<--A
5#b(Aa)b#A=a入栈
6#b(Aa)b#a=)入栈
7#b(Aa)b#)>b规约Aa)<--B
8#b(Bb#B>b规约(B<--A
9#bAb#A=b入栈
10#bAb#b>#规约bAb<--S
11#S#接受        
  • 只要不大于就入栈
  • 规约时,最右边为句柄尾,往左看,只要遇到不小于就为句柄头
  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小李学不完

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值