编译原理复习提纲(适用于清华大学版)

注:本题纲白话的总结了所有较难的算法,简单易懂的就省略了

1.       NFA转DFA

第一步,将正规式转为NFA,例如

      

              即*为自循环

NFA确定化

标号得图

  

2.       消除直接左递归

       若 A->Aa1 | Aa2| b1 | b2

       则改写为 A ->b1A` | b2A`

                      A`->a1A` | a2A`| 空

 

3.       间接消除左递归

       转化为直接再写

       例如:

4.       Follow集求法

       若T->FA 若F后可接空,则将followT加入到followF中

       若A→αBβ是一个产生式,则把FIRST(β)的非空元素加入followB

5.       Select集

       A→α,若α不能推导出ε,则SELECT(A→α)=FIRST(α)

       如果α能推导出ε则:SELECT(A→α)=(FIRST(α) –{ε})∪FOLLOW(A)

6.       First集求法

       首先观察每一个式子有没有->a或->空 或->aB,有则为a

       其次处理S->ABD,若A,B可以->空 ,则first S=f A-空 U fB-空 U f D8 ,且 要把f        A的 非空终结符加入到S

 

7.       短语,直接短语,句柄求法

l  画出抽象语法树

l  短语就是同一个根的叶子

l  直接短语就是最后一层的叶子

l  一个短语,直接短语,就是来自于一个根

l  句柄就是直接短语的最左侧的那个

 

短语:S,(T),b,Sd(T),Sd(T)db,(Sd(T)db)

直接短语:S,(T),b

句柄:S


8.       LR(0)分析表

l  分析表分为action表和goto表

l  构造lr0项目集规范组

l  根据项目集画表

9.       SLR0分析表

l  求符号的first,follow集

l  {X → α.bβ,A → γ.,B →δ.} b为终结符

如果FOLLOW(A)∩FOLLOW(B)∩ {b} =ф,则可以解决冲突

结果:遇到b移进,遇到follow中的,归约

10.    LR(1)分析表

l  Lr1项目集:1.一开始,绿框处S'是整个句子,所以后面理所当然跟句子结束符#。然后S后面是ε’(就是什么都没有)所以β=ε,接着逗号后面是‘#’a=#,这样FIRST(βa)=FIRST(ε#)={#}。这就是I0S后面#号的来历。

              2.I2中,如红线所示,在I2:S->a·Ad,#A的后面是d,所以FIRST(d#)=    {d}          (就是“d#”的第一个终结符d),所以接下来A的后面跟的是d


11.    文法类型的判断

l  一型:右侧比左侧长

l  二型:左侧为非终结符

l  三型:式子右侧必为a或aB

12.    Ll1文法判断

对于产生式 A-> α | β

 

1.如果α、β均不能推导出ε(空语句),则 FIRST(α) ∩ FIRST(β) = ∅;

 

2.α 和 β 至多有一个能推导出 ε;

 

              3. 如果 β经过0步或多步可以推导出 ε,则 FIRST(α) ∩ FOLLOW(A) = ∅

 

 

 

 

 

问题 6:

试消除下面文法G[A] 中的左递归和左公因子,并判断改写后的文法是否为LL(1) 文法?

G[A] : A→aABe | a

B→Bb | d

答案:

提取左公共因子和消除左递归后,G[A]变换为等价的G′[A]如下:

A→a A′

A′→A B e|ε

B→d B′

B′→b B′|ε

?  计算非终结符的FIRST 集和FOLLOW集结果如下:

FIRST(A)= { a}  FOLLOW(A)= {#,d }

FIRST(B)= { d}  FOLLOW(B)= { e }

FIRST(A′)= { a,ε}  FOLLOW(A′)= {#,d }

FIRST(B′)= { b,ε}  FOLLOW(B′)= { e }

 对相同左部的产生式可知:

FIRST (A B e)∩FOLLOW (A′) ={ a }∩ {#,d }= ∅

FIRST (b B′)∩FOLLOW (B′) ={ b }∩ { e }= ∅

所以 G′[S]是 LL(1) 文法。


 

考虑文法 S→ A S | b A→ S A | a

(1)构造文法的 LR(0)项目集规范族及相应的 DFA。

(3)构造文法的 SLR 分析表。

(4)对于输入串 bab,给出 SLR 分析器所作出的动作。

(5)构造文法的 LR(1)分析表和 LALR 分析表。

答案:

(1)令拓广文法 G’为

(0) S’ → S

(1)S → A S

(2)S→ b

(3)A→ S A

(4)A → a

其 LR(0)项目集规范族及识别该文法活前缀的 DFA 如下图所示:

FOLLOW(S)={#,a,b}

FOLLOW(A)={a,b}

LR(0)项目:

 


相关推荐
清华出社出 张素琴、吕映芝、蒋维杜、戴桂兰等老师编写的第二编译原理教科课件 第1章 引论 1.1 什么是编译程序 1.2 编译过程和编译程序的结构 1.2.1 编译过程概述 1.2.2 编译程序的结构 1.2.3 编译阶段的组合 1.3 解释程序和一些软件工具 1.3.1 解释程序 1.3.2 处理源程序的软件工具 1.4 程序设计语言范型 练习第2章 PL/0编程程序的实现 2.1 PL/0语言描述 2.1.1 PL/0语言的语汉描述图 2.1.2 PL/0语言文法的EBNF表示 2.2 PL/0编译程序的结构 2.3 PL/0编译程序的词法分析 2.4 PL/0编译程序的语法语义分析 2.5 PL/0编译程序的目标代码结构和代码生成 2.6 PL/0编译程序的语法错误处理 2.7 PL/0编译程序的目标代码解释执行时的存储分配 练习第3章 文法和语言 3.1 文法的直观概念 3.2 符号和符号串 3.3 文法和语言的形式定义 3.4 文法的类型 3.5 上下文无关文法及其语法树 3.6 句型的分析 3.6.1 自上而下的分析方法 3.6.2 自下而上的分析方法 3.6.3 句型分析的有关问题 3.7 有关文法实用中的一些说明 3.7.1 有关文法的实用限制 3.7.2 上下文无关文法中的规则 3.8 典型例题解答 练习第4章 词法分析 4.1 词法分析程序的设计 4.1.1 词法分析程序与语法分析程序的接口方式 4.1.2 词法分析程序的输出 4.1.3 将词法分析工作分离的考虑 4.2 单词的描述工具 4.2.1 正规文法 4.2.2 正规式 4.2.3 正规文法和正规式的等性 4.3 有穷自动机 4.3.1 确定的有穷自动机(DFA) 4.3.2 不确定的有穷自动机(NFA) 4.3.3 NFA转换为等价的DFA 4.3.4 确定有穷自动机的化简 4.4 正规式和有穷自动机的等价性 4.5 正规文法和有穷自动机的等价性 4.6 词法分析程序的自动构造工具 4.7 典型例题及解答 练习第5章 自顶向下语法分析方法 5.1 确定的自顶向下分析思想 5.2 LL(1)文法的判别 5.3 某些非LL(1)文法到LL(1)文法的等价变换 5.4 不确定的自顶向下分析思想 5.5 确定的自顶向下分析方法 5.5.1 递归子程序法 5.5.2 预测分析方法 5.6 典型例题及解答 练习第6章 自底向上优先分析 6.1 自底向上优先分析概述 6.2 简单优先分析法 6.2.1 优先关系 6.2.2 简单优先文法的定义 6.2.3 简单优先分析法的操作步骤 6.3 算符优先分析法 6.3.1 直观算符优先分析法 6.3.2 算符优先文法的定义 6.3.3 算符优先关系表的构造 6.3.4 算符优先分析算法 6.3.5 优先函数 6.3.6 算符优先分析法的局限性 6.4 典型例题及解答 练习第7章 LR分析 7.1 LR分析概述 7.2 LR(0)分析 7.2.1 可归前缀和子前缀 7.2.2 识别活前缀的有限自动机 7.2.3 活前缀及其可归前缀的一般计算方法 7.2.4 LR(0)项目集规范族的构造 7.3 SLR(1)分析 7.4 LR(1)分析 7.4.1 LR(1)项目集族的构造 7.4.2 LR(1)分析表的构造 7.5 LALR(1)分析 7.6 二义性文法在LR分析中的应用 7.7 语法分析程序的自动构造工具YACC 7.8 典型例题及解答 练习第8章 语法制导翻译和中间代码生成 8.1 属性文法 8.2 语法制导翻译概论 8.2.1 计算语义规则 8.2.2 S-属性方法和自下而上翻译 8.2.3 L-属性文法在自上而下分析中的实现 8.2.4 L-属性文法在自下而上分析中的实现 8.3 中间代码的形式 8.3.1 逆波壮大记号 8.3.2 三元式和树表表示 8.3.3 四元式 8.4 简单赋值语句的翻译 8.5 布尔表达式的翻译 8.5.1 布尔表达式的翻译方法 8.5.2 控制语句中布尔表达式的翻译 8.6 控制结构的翻译 8.6.1 条件转移 8.6.2 开关语句 8.6.3 for循环语句 8.6.4 出口语句 8.6.5 goto语句 8.6.6 过程调用的四元式产生 8.7 说明语句的翻译 8.7.1 简单说明语句的翻译 8.7.2 过程中的说明 8.8 数组和结构的翻译 8.8.1 数组说明和数组元素的引用 8.8.2 结构(记录)说明和引用的翻译 练习 第9章
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页