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

一、预测分析方法步骤

  • 提取左公因子,消除左递归
  • 判断文法是否为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# 

未完待续...... 

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-10 00:10:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-10 00:10:04       101 阅读
  3. 在Django里面运行非项目文件

    2024-01-10 00:10:04       82 阅读
  4. Python语言-面向对象

    2024-01-10 00:10:04       91 阅读

热门阅读

  1. Qt5.14.2实现将html文件转换为pdf文件

    2024-01-10 00:10:04       42 阅读
  2. Vue的Computed、Methods和Watch

    2024-01-10 00:10:04       73 阅读
  3. 快速排序和冒泡排序

    2024-01-10 00:10:04       59 阅读
  4. linux下数据库定时备份

    2024-01-10 00:10:04       60 阅读
  5. MySQL数据类型

    2024-01-10 00:10:04       68 阅读
  6. 泛型编程-常用模板

    2024-01-10 00:10:04       44 阅读
  7. 怎么形象化理解线程

    2024-01-10 00:10:04       54 阅读
  8. alist重置密码

    2024-01-10 00:10:04       75 阅读
  9. PCL 点云八叉树体素搜索

    2024-01-10 00:10:04       57 阅读