1.构造正规式的DFA。
例:1(0|1)*101
首先构造NFA
NFA化为DFA:
状态转换表:
2.正规式转成正规文法。
例 :将r=a(a|d)*转换成相应的正规文法
3.正规文法转成正规式。
例:文法G[S]
S→aA
S→a
A→aA
A→dA
A→a
A→d
解:
4.正规文法转成有穷自动机。
例:文法G[S]
S → aA
S → bB
S → ε
A → aB
A → bA
B → aS
B → bA
B → ε
解:
5.带标注的语法分析树。
综合属性:从下往上
继承属性 :从上往下
例: 对于语言 ,我们还可以设计一个含有继承属性的属性文法作为语义计算模型(开始符号为 S):
S →ABC { B.in_num := A .num;C.in_num := A .num;
if (B.num=0 and (C.num=0)
then print (“Accepted!”)
else print (“Refused!”) }
A → A1a { A.num := A1 . num + 1 }
A → a { A.num := 1 }
B → B1b { B1 . in_num := B.in_num;
B.num := B1 . num -1 }
B → b { B.num := B.in_num -1 }
C → C1c { C1 . in_num := C.in_num;
C.num := C1.num -1 }
C → c { C.num := C.in_num -1 }
这个属性文法既包含综合属性,又包含继承属性。其中,A . num,B . num 和 C . num 是 综合属性,而 B . in_num 和 C . in_num 是继承属性。
输入串 aaabbbccc
6.将程序划分为基本块,并画出程序流程图。
7.DAG图的构造过程。
8.编译过程和编译程序的结构
9.判断是否为LL(1)文法
Select集合:有First()就写First()里面的元素,如果First()为空,则用Follow()集合里面的元素。
10.LR(0)分析表
消除左递归:
提取公因子:
例:已知文法G[S],求其LR(0)的分析表。
S → aA | bB
A → cA | d
B → cB | d
11.LR(0)分析过程
例:设有文法G[S]:
(1)S→aAcBe
(2)A→b
(3)A→Ab
(4)B→d
对输入串abbcde使用移进-归约的方法分析它是否为上述文法的句子
12.SLR(1)分析法
SLR(1)的分析过程与LR(0)的分析过程完全一样, 唯一不同的是分析表!
13.LR(1)分析法
14.LALR(1)分析法
在LR(1)项目集规范族基础上,合并同心集.
15.语法分析方法
16.乔姆斯基层次
L0:0型文法又叫非限制文法或短语结构文法。
L1:1型文法又叫上下文有关文法。
L2:2型文法又叫上下文无关文法。
L3:3型文法又叫正规文法。
17.状态转换图转成正则表达式
公式:
答案:(010|1)*
18.NFA和DFA的三种表现形式
NFA和DFA都是都是有穷自动机,有穷自动机三种表示形式:
数学定义、状态转换图、状态转移矩阵。
19.文法与语言的关系
文法对应的语言唯一,语言对应的文法不唯一。