编译:将 高级语言 翻译成 汇编语言或机器语言 的过程
字母表
∑
1
\sum {}_{1}
∑1和
∑
2
\sum {}_{2}
∑2的乘积
{
0
,
1
}
{
a
,
b
}
=
{
0
a
,
0
b
,
1
a
,
1
b
}
\{0, 1\}\{a, b\} = \{0a, 0b,1a,1b \}
{0,1}{a,b}={0a,0b,1a,1b}
字母表
∑
\sum
∑的n次幂
∑
0
=
{
ε
}
\sum {}^{0} = \{ \varepsilon \}
∑0={ε}
{ 0 , 1 } 3 = { 000 , 001 , 010 , 011 , 100 , 101 , 110 , 111 } \{0, 1\}^3=\{000, 001, 010, 011, 100, 101, 110, 111\} {0,1}3={000,001,010,011,100,101,110,111}
字母表
∑
\sum
∑的正闭包
∑
+
=
∑
∪
∑
2
∪
∑
3
∪
…
∑^+ = ∑ ∪ ∑^2 ∪ ∑^3 ∪ …
∑+=∑∪∑2∪∑3∪…
{ a , b , c , d } + = { a , b , c , d , a a , a b , a c , a d , b a , b b , b c , b d , … , a a a , a a b , a a c , a a d , a b a , a b b , a b c , … } \{a, b, c, d \}^+ = \{a, b, c, d, aa, ab, ac, ad, ba, bb, bc, bd, …, aaa, aab, aac, aad, aba, abb, abc, …\} {a,b,c,d}+={a,b,c,d,aa,ab,ac,ad,ba,bb,bc,bd,…,aaa,aab,aac,aad,aba,abb,abc,…}
字母表的正闭包:长度正数的符号串构成的集合
字母表
∑
\sum
∑的克林闭包
∑
∗
=
∑
0
∪
∑
+
=
∑
0
∪
∑
∪
∑
2
∪
∑
3
∪
…
∑^* = ∑^0 ∪ ∑^+ = ∑^0 ∪ ∑ ∪ ∑^2 ∪ ∑^3 ∪ …
∑∗=∑0∪∑+=∑0∪∑∪∑2∪∑3∪…
{ a , b , c , d } ∗ = { ε , a , b , c , d , a a , a b , a c , a d , b a , b b , b c , b d , … , a a a , a a b , a a c , a a d , a b a , a b b , a b c , … } \{a, b, c, d \}^* = \{\varepsilon,a, b, c, d, aa, ab, ac, ad, ba, bb, bc, bd, …, aaa, aab, aac, aad, aba, abb, abc, …\} {a,b,c,d}∗={ε,a,b,c,d,aa,ab,ac,ad,ba,bb,bc,bd,…,aaa,aab,aac,aad,aba,abb,abc,…}
字母表的克林闭包:任意符号串(长度可以为零)构成的集合
串
设 ∑ 是一个字母表, ∀ x ∈ ∑ ∗ \forall x \in ∑^* ∀x∈∑∗ ,x称为是∑上的一个串
串上的运算—连接
x
=
d
o
g
,
y
=
h
o
u
s
e
x
y
=
d
o
g
h
o
u
s
e
x = dog,y=house \ \ \ \ \ xy=doghouse
x=dog,y=house xy=doghouse
串上的幂
运算
s
0
=
ε
s^0 = \varepsilon
s0=ε
s n = s n − 1 s s^n = s^{n-1}s sn=sn−1s
文法的形式化定义
G = ( V T , V N , P , S ) G = (V_T,V_N,P,S) G=(VT,VN,P,S)
V T V_T VT: 终结符集合,是文法定义的语言的基本符号,有时也称为 token
V N V_N VN: 非终结符结合,是用来表示语法成分的符号,有时也称为“语法变量”
P P P: 产生式,描述了将终结符和非终结符组合成串的方法
S S S: 开始符号,是该文法中的最大的语法成分
产生式的简写
$a \rightarrow b_1, a \rightarrow b_2,…, a \rightarrow b_n $ 简写为: a → b 1 ∣ b 2 ∣ . . . ∣ b n a \rightarrow b_1|b_2|...|b_n a→b1∣b2∣...∣bn
b
1
,
b
2
,
.
.
.
b
n
b_1,b_2,...b_n
b1,b2,...bn是
a
a
a 的候选式
推导:
如果有产生式 α → β ∈ P α→β∈P α→β∈P,那么可以将符号串 γ α δ γαδ γαδ 中的 α α α替换为 β β β 即将 γ α δ γαδ γαδ 重写为 γ β δ γβδ γβδ,这个替换记做
γ
α
δ
⇒
γ
β
δ
γαδ\Rightarrow γβδ
γαδ⇒γβδ,叫做文法中的符号串
γ
α
δ
γαδ
γαδ 直接推导
出
γ
β
δ
γβδ
γβδ
推导和归约
句型和句子
由文法 G 的开始符号 S 推导出的所有句子构成的集合称为文法 G 生成的语言,记为 L(G)
语言上的运算
例: 令 L = { A , B , … , Z , a , b , … } L=\{A,B,…,Z, a,b,…\} L={A,B,…,Z,a,b,…}, D = { 0 , 1 , … , 9 } D=\{0,1,…,9\} D={0,1,…,9}。则 L ( L ⋃ D ) ∗ L(L\bigcup D)^* L(L⋃D)∗表示的语言是标识符
短语
给定一个句型,其分析树中的每一棵子树的边缘称为该句型的一个短语
二义性文法
如果一个文法可以为某个句子生成多棵分析树,则称这个文法是二义性的。
正则表达式的定义
ξ \xi ξ 是一个RE, L ( ξ ) = { ξ } L(\xi)=\{ \xi \} L(ξ)={ξ}
如果 a ∈ ∑ a \in \sum a∈∑,则a是一个RE, L ( a ) = { a } L(a) = \{a\} L(a)={a}
假设r和s都是RE,表示的语言分别是 L ( r ) L(r) L(r)和 L ( s ) L(s) L(s),则
十进制整数的RE
正则定义
c语言中标识符的正则定义
有穷自动机
系统只需要根据当前所处的状态
和当前面临的输入信息
就可以决定系统的后继行为
。每当系统处理了当前的输入后,系统的内部状态也将发生改变
。
转换图
结点
start箭头
指向带标记的有向边
:如果对于输入a,存在一个从状态p到状态q的转换,就在p、q之间画一条有向边,并标记上a
FA定义(接受)的语言
从初始状态
到某个终止状态
的转换序列,则称串x被该FA接收
该FA定义(或接收)的语言
,记为
L
(
M
)
L(M)
L(M)最长子串匹配原则
当输入串的多个前缀
与一个或多个模式匹配时,总是选择最长的前缀
进匹配。
确定的有穷自动机(DFA)
M = ( S , ∑ , δ , s 0 , F ) M = (S,\sum,\delta,s_0,F ) M=(S,∑,δ,s0,F)
S
的转换函数。
∀
s
∈
S
,
a
∈
∑
,
δ
(
s
,
a
)
\forall s \in S,a\in \sum,\delta(s,a)
∀s∈S,a∈∑,δ(s,a)表示从状态s触发,沿着标记为a的边所能到达的状态。非确定的有穷自动机(NFA)
M = ( S , ∑ , δ , s 0 , F ) M = (S,\sum,\delta,s_0,F ) M=(S,∑,δ,s0,F)
集合
。NFA和NFA的等价性
对任何非确定的有穷自动机N,存在定义同一语言的确定的有穷自动机D
对任何确定的有穷自动机D,存在定义同一语言的非确定的有穷自动机N
DFA和NFA可以识别相同的语言
带有 ξ \xi ξ 边的NFA
M = ( S , ∑ , δ , s 0 , F ) M = (S,\sum,\delta,s_0,F ) M=(S,∑,δ,s0,F)
集合
。
最左推导
最右推导
自顶向下的语法分析采用最左推导方式
最左非终结符
进行替换下一个终结符
,选择最左非终结符的一个候选式消除左递归
消除间接左递归
FIRST
FOLLOW
select
预测分析表
LL(1)文法的预测分析表项入口唯一
最左归约 反向构造最右推导
每次归约的符号串称为“句柄”,句柄是句型的最左直接短语
移入-归约分析中存在的问题:错误地识别了句柄
LR文法:
状态
增广文法:加上新的开始符号,引入这个新的开始产生式的目的是使得文法开始符号仅出现在一个产生式的左边,从而使得分析器只有一个接受状态。
移进/归约冲突
归约/归约冲突
SDD:语法制导定义
SDT:语法制导翻译方案
终结符没有继承属性(终结符从词法分析器处获得的属性值是综合属性值)
s属性
L属性
用高级语言编写的程序经编译后产生的程序叫( )。
答案:B
编译程序中语法分析器接收以( )为单位的输入。
答案:A
编译程序绝大多数时间花在( )上。
答案:D
文法G所产生的( )的全体,被称为该文法描述的语言
答案:C
词法分析器用于识别( )。
答案:C
词法分析器的加工对象是()。
答案:C
有限状态自动机能识别( )。
答案:C
( )不是DFA的成分。
答案:B
同正规式 ( a ∣ b ) ∗ (a|b)^* (a∣b)∗ 等价的正规式为( )。
答案:D
一个正规式只能对应一个确定的有限状态自动机。
答案:✖ 可能有空
在递归下降方法中,若文法存在左递归,则会使分析过程产生( )。
答案:D
识别上下文无关语言的自动机是( )。
答案:A
FOLLOW集中可以含有ε。
答案:✖
若a为终结符,则A→α·aβ为( )项目。
答案:B
LR(1) 文法都是( )。
答案:C
编译程序的语法分析器必须输出的信息是( )。
答案:B