编译原理—词法分析构建DFA上下文无关文法LL分析提取正规式

Posted 之墨_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编译原理—词法分析构建DFA上下文无关文法LL分析提取正规式相关的知识,希望对你有一定的参考价值。

编译原理—构建DFA/上下文无关文法/提取正规式

构建DFA

表示被 5 5 5整除的二进制串的 D F A DFA DFA
一个数 m o d   5 mod\\ 5 mod 5 结果为 0 , 1 , 2 , 3 , 4 0,1,2,3,4 0,1,2,3,4以此为 5 5 5 种状态。由于要
求是能被 5 5 5 整除的数, 0 m o d 5 = 0 0 mod 5 = 0 0mod5=0满足,故状态 0 0 0 为初始
& \\& &最终状态,状态表如下:

注意这里 + 0 、 + 1 +0、+1 +0+1是对二进制串末尾而言,分别代表二进制串对应的十进制数乘 2 2 2以及乘 2 2 2 + 1 +1 +1,例如 1000 = 8 D + 0 = 10000 = 1 6 D 1000=8_D+0=10000=16_D 1000=8D+0=10000=16D,原本 m o d   5 mod\\ 5 mod 5 3 3 3,变成了余 1 1 1

根据状态表构建 D F A   M DFA\\ M DFA M

上下文无关文法

给出对应的上下文无关文法

0 : S 、 1 : A 、 2 : B 、 3 : C 、 4 : D 0:S、1:A、2:B、3:C、4:D 0:S1:A2:B3:C4:D
则根据 D F A DFA DFA给出上下文无关文法:
S → 1 A ∣ 0 S ∣ ϵ A → 0 B ∣ 1 C B → 0 D ∣ 1 S C → 0 A ∣ 1 B D → 0 C ∣ 1 D S→1A|0S|\\epsilon\\\\ A→0B|1C\\\\ B→0D|1S\\\\ C→0A|1B\\\\ D→0C|1D S1A∣0SϵA0B∣1CB0D∣1SC0A∣1BD0C∣1D

因为S是终态也是初态,所以有S→ε

词法分析

给出 F i r s t First First集与 F o l l o w Follow Follow
F i r s t ( S ) = 0 , 1 , ϵ F i r s t ( A ) = F i r s t ( B ) = F i r s t ( C ) = F i r s t ( D ) = 0 , 1 F o l l o w ( S ) = F o l l o w ( A 、 B 、 C 、 D ) = $ First(S)=\\0,1,\\epsilon\\\\\\ First(A)=First(B)=First(C)=First(D)=\\0,1\\\\\\ Follow(S)=Follow(A、B、C、D)=\\$\\ First(S)=0,1,ϵFirst(A)=First(B)=First(C)=First(D)=0,1Follow(S)=Follow(ABCD)=

L L ( 1 ) LL(1) LL(1)分析

给出 L L ( 1 ) LL(1) LL(1)分析表

01$
S S S S → 0 S S→0S S0S S → 1 A S→1A S1A S → ϵ S→\\epsilon Sϵ
A A A A → 0 B A→0B A0B A → 1 C A→1C A1C
B B B B → 0 D B→0D B0D B → 1 S B→1S B1S
C C C C → 0 A C→0A C0A C → 1 B C→1B C1B
D D D D → 0 C D→0C D0C D → 1 D D→1D D1D

提取正规式

给出正规式 R R R,使得 L ( R ) = L ( M ) L(R) = L(M) L(R)=L(M)
由于状态转换图中到达终态 S 0 S0 S0的状态转换为 S 0 → S 0 , S 2 → S 0 S0→S0, S2→S0 S0S0,S2S0
因此依次消去 S 4 、 S 3 、 S 1 、 S 2 S4、S3、S1、S2 S4S3S1S2

S0和S2是新的初态和终态,S1是原来的S0

最终得到正规式

( 0 ∣ 1 ( 10 ) ∗ ( 0 ∣ 11 ) ( 0 1 ∗ 01 ∣ 0 1 ∗ 00 ( 10 ) ∗ ( 0 ∣ 11 ) ) ∗ 1 ) ∗ (0|1(10)^*(0|11)(01^*01|01^*00(10)^*(0|11))^*1)^* (0∣1(10)(0∣11)(0101∣0100(10)(0∣11))1)

以上是关于编译原理—词法分析构建DFA上下文无关文法LL分析提取正规式的主要内容,如果未能解决你的问题,请参考以下文章

编译原理—翻译方案属性栈代码

LRSLRLRLALR文法之间的关系—编译原理

什么是上下文无关文法最左推导和最右推导—编译原理

如何消除文法二义性如何判断二义文法—编译原理

如何消除左递归何时需要消除左递归—编译原理

什么是句柄什么是自上而下自下而上分析—编译原理