编绎原理 - LL(1)预测分析表与预测分析过程表

目录

前提

一、列出LL(1)文法分析表

二、画出该LL(1)预测分析表

1.方法

2. LL(1)预测分析表如下

三、预测分析过程表

1. 说明

(1)分析栈为什么要逆序进栈

(2)分析栈与余留输入串栈为什么要有#

2.预测分析过程表

四、练习


前提

接下来的内容将以LL(1)文法举例,若需要掌握LL(1)文法判别(包括LL(1)分析表),请阅读下篇:

LL(1)文法判别icon-default.png?t=N7T8http://t.csdnimg.cn/aIaE8

一、列出LL(1)文法分析表

注意:这里是LL(1)文法分析表,不是预测分析表

已知LL(1)文法,它的分析表如下

LL(1)分析表
FIRST集FOLLOW集SELECT集

S→AaS

S→BbS

S→d

{a}

{b,c}

{d}

{#}

{a}

{b,c}

{d}

A→a{a}{a}{a}

B→ε

B→c

{ε}

{c}

{b}

{b}

{c}

二、画出该LL(1)预测分析表

1.方法

(1)  产生式的非终结符为列,终结符(包括#)为行

    注意:ε既不是终结符也不是非终结符,因此不需要写

(2)  依据SELECT集查找 非终结符  产生  终结符的产生式 

以S与a为例

select中的a对应产生式S→AaS,因此对应框内写S→AaS

简单记忆就是:SELECT集对应的产生式

2. LL(1)预测分析表如下

注意:#就算用不到也要写

abcd#
SS→AaSS→BbSS→BbSS→d
AA→a
BB→εB→c

三、预测分析过程表

以符号串aad预测分析过程为例

1. 说明

(1)分析栈为什么要逆序进栈

栈为先进后出,因此余留输入串aad的栈如下

3a
2a
1d

因为是从文法的开始符号开始推导,假定使用产生式S→AaS,为使得产生式与符号串一一对应,需要逆序进栈,即S先进栈,位于最底部

       正     逆
3SA
2aa
1AS

从S能推出d,而A不能,可以看出逆序的作用

(2)分析栈与余留输入串栈为什么要有#

解释:‘#’ 是文法的结束标志,用来判断分析过程是否有误。

例如:分析栈为S→#a ,而余留栈为#,a与#不匹配,那么很明显是推导错误

2.预测分析过程表

以符号串aad预测分析过程为例

以第一行为例:所用产生式的来源:预测分析表中非终结符与终结符对应的产生式

S使用S→AaS产生a 

下一行为:A使用A→a产生a

将上图放在此处作为参照

步骤分析栈余留输入串栈推导所用产生式或匹配
1     #Saad#S→AaS
2     #SaAaad#A→a
3     #Saaaad#a匹配成功,出栈
4     #Sa  ad#a匹配成功,出栈
5     #S    d#S→d
6     #d    d#d匹配成功,出栈
7     #      #分析成功

四、练习

建议:可以先自己练习一下,之后对答案掌握

已知LL(1)文法分析表如下:

FIRST集↑FOLLOW集↓SELECT集
E→TE'{i,(}{),#}{i,(}

E'→+TE'

E'→ε

{+}

{ε}

{),#}

{+}

{),#}

T→FT'{i,(}{),#,+}{i,(}

T'→*FT'

T'→ε

{*}

{ε}

{),#,+}

{*}

{),#,+}

F→i

F→(E)

{i}

{(}

{*,),+,#}

{i}

{(}

预测分析表如下:

i()*+#
EE→TE'E→TE'

E'

E'→εE'→+TE'E'→ε
TT→FT'T→FT'
T'T'→εT'→*FT'T'→εT'→ε
FF→iF→(E)

i+i分析过程如下:

步骤分析栈余留输入串栈推导所用产生式或匹配
1

#E

i+i#E→TE'
2#E'Ti+i#T→FT'
3#E'T'Fi+i#F→i
4#E'T'ii+i#i匹配成功,出栈
5#E'T'+i#T'→ε
6#E'+i#E'→+TE'
7#E'T++i#+匹配成功,出栈
8#E'Ti#T→FT'
9#E'T'Fi#F→i
10#E'T'ii#i匹配成功,出栈
11#E'T'#T'→ε
12#E'#E'→ε
13##接受

  • 15
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值