同系列链接
【北航编译原理笔记】1. 基础知识
【北航编译原理笔记】2. 词法分析
【北航编译原理笔记】3. 语法分析
【北航编译原理笔记】4. 语义分析与符号表
词法分析
功能:
根据词法规则识别及组合单词,进行词法检查
对数字常数完成 数字字符串 -->二进制数值 转换
删去空格字符和注释
单词种类: 保留字, 标识符, 常数, 分界符
单词内部形式: 单词类别 + 单词值
单词类别: 按单词种类分类: 标识符, 无符号常数(整), 无符号浮点数, 布尔常数, 字符串常数, 保留字, 分界符.
保留字和分界符采用一符一类
常用状态图来作词法分析
先将正则表达式转化为非确定自动机(NFA: Non-deterministic Finite Automata)(存在某一个状态,对于同一个输入有不同的结果)
再将非确定自动机转化为确定自动机(DFA: Deterministic Finite Automata)
将确定自动机简化(直到不存在等价状态): 利用一致性状和蔓延性状态不断"分区",最终还在一个分区里的状态即可以简化
画图以及程序
状态图中: 双圈表示"终止符",圈内一般是非终止符,起始圈是新加进去的.
正则文法 和 正则表达式 的相互转化:
- A → x B , B → y ⟺ A → x y A\rightarrow xB, B\rightarrow y \ \ \ \ \ \Longleftrightarrow A \rightarrow xy A→xB,B→y ⟺A→xy.
- A → x A ∣ y ⟺ A → x ∗ y A\rightarrow xA\ |\ y\ \ \ \ \ \ \ \ \ \ \ \ \ \Longleftrightarrow A \rightarrow x^*y A→xA ∣ y ⟺A→x∗y.
- A → x , A → y ⟺ A → x ∣ y A\rightarrow x, A\rightarrow y\ \ \ \ \ \ \ \ \Longleftrightarrow A \rightarrow x\ |\ y A→x,A→y ⟺A→x ∣ y.
对于二义性问题:
- 最长匹配原则, 有更长则识别更长的
- 优先匹配原则, 规则序列越前优先级越高, 写规则序列时要注意
NFA的确定化:
集合
I
I
I的
ε
−
\varepsilon-
ε−闭包: (
M
M
M是自动机,
I
I
I是
M
M
M的状态集一个子集)
若
s
∈
I
s \in I
s∈I,则
s
∈
ε
−
C
l
o
s
u
r
e
(
I
)
s \in \varepsilon-Closure(I)
s∈ε−Closure(I).
若
s
∈
I
s \in I
s∈I,则从
s
s
s出发经过任意条
ε
\varepsilon
ε弧而能到达的任何状态都属于
ε
−
C
l
o
s
u
r
e
(
I
)
\varepsilon-Closure(I)
ε−Closure(I).
ε
−
C
l
o
u
r
e
(
I
)
\varepsilon-Cloure(I)
ε−Cloure(I)是集合
I
I
I的
ε
−
\varepsilon-
ε−闭包:
J
J
J是从
I
I
I出发,沿
a
a
a弧到达的状态所组成的集合.
I
a
=
ε
−
C
l
o
s
u
r
e
(
J
)
I_a = \varepsilon-Closure(J)
Ia=ε−Closure(J).