编译原理期末大题步骤——例题

文章详细介绍了如何通过预测分析方法消除左递归并构造预测分析表,以及如何构造算符优先表来确定文法的分析顺序。以一个文法为例,展示了从左公因子提取到输入串分析的过程。
摘要由CSDN通过智能技术生成

一、预测分析方法步骤

  • 提取左公因子,消除左递归
  • 判断文法是否为LL(1)文法
  • 若是,构造预测分析表;否则,不能进行分析。
  • 根据预测分析表对输入串进行分析

例子:

文法G[E]:                                            E\rightarrowE+T|T

T\rightarrowT*F|F

                                                             F\rightarrowi|(E)                                  构造预测分析表。 

(1)消除左递归 

 VN排列为E,T,F

消除E的一切直接左递归:

        E\rightarrowTE'        T\rightarrowT*F        F\rightarrowi

        E'\rightarrow+E'|ε    T\rightarrowF           F\rightarrow(E)

消除T的一切直接左递归:

        E\rightarrowTE'        T\rightarrowFT'        F\rightarrowi

        E'\rightarrow+E'|ε    T^\rightarrow*FT'|ε   F\rightarrow(E)

F没有左递归

文法无左公因子。

所以,提取左公因子和消除左递归后的文法为:       

        E\rightarrowTE'        T\rightarrowFT'        F\rightarrowi

        E'\rightarrow+E'       T^\rightarrow*FT'     F\rightarrow(E)

        E'\rightarrowε           T\rightarrowε

(2)判断改写后的文法是否为LL(1)文法:

1、求First集:

        First(E)={ i,( }

        First(E')={ +,ε }

        First(T)={ i,( }

        First(T')={ *,ε }

        First(F)={ i,( }

2、求Follow集:

        Follow(E)={ i,( }

        Follow(E')={ +,ε }
        Follow(T)={ i,( }

        Follow(T')={ *,ε }

        Follow(F)={ i,( }

3、求Select集:      

        SELECT (E→TE') = First(TE') = { i, ( }

        SELECT(E'→+iE') = First (+TE') = { + }

        SELECT(E'→ε) = Follow(E') ={ #, )

        SELECT (T→FT') = First(FT') = { i, (

        SELECT(T'→*FT')= First(*FT') = { * }

        SELECT(T'→ε )=Follow(T')={ +, #, )

        SELECT(F→(E)) = First((E)) = { (

        SELECT(F→i) = First(i) = { i }

4、判定:

        SELECT(E'→+TE') \cap SELECT(E'→ε )= Φ

        SELECT(T'→*FT') \cap SELECT(T'→ε ) = Φ 

        SELECT(F→(E) ) \cap SELECT(F→i) =Φ

(3)构造预测分析表

构造预测分析表M的方法

M是二维数组,元素是M[A,a]

其中A是非终结符,a是终结符或“#”。

若aESELECT(A→a),则把A→a放入M[A,a]中。 (所有空白的M[A,a]表示出错。)

(4)预测分析输入串

  #i+i*I#

二、构造算符优先表步骤 

  • 计算每个V的FirstVt,集和LastVt集
  • 求优先关系​​​​​​​​​​​​​​
    • 求=关系

    • 求<关系:找……aB……, a<FirstVT(B)

    • 求>关系:找……Bc……, LastVT(B)>c

  • 3、构造优先关系表
  • 4、根据优先关系分析句子 

例子:

文法G[E]:

E`→#E#

E→E+T

E→T

T→T*F

T→F

F→P^F

F→P

P→(E)

P→i        

构造算符优先关系表

(1)计算FirstVt集和LastVt集:

(2)计算优先关系 

 (3)构造优先关系表

(4)分析句子 

#i+i# 

未完待续...... 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小李学不完

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

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

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

打赏作者

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

抵扣说明:

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

余额充值