编译原理-词法分析
注意: 此文章中|| 与 | 符号意义相同
词法分析器
- 词法分析器: 把构成源程序的字符流翻译成记号(token)流,还完成和用户接口的一些任务
其中:- 词法单元: 亦称单词, 编程语言中合法的字符串
- 词法记号: 满足某种给定规则(模式)的词法单元
示例: 对于词法记号NUM, 其词法单元可能有3.1, 10, 2.8E12等数字, 其"模式"即"认定为数字的字符串"
串和语言
- 字母表: 符号的有限集合. 示例: Σ = {0,1}
- 串: 符号的有穷序列. 示例: 0110,ε(长度为0的空串)
运算:- 连接: xy, 其中sε = εs = s
- 积: s 0 = ϵ , s i = s i − 1 s ( i > 0 ) s^0 = \epsilon , s^i = s^{i-1}s(i>0) s0=ϵ,si=si−1s(i>0)
- 语言: 字母表上的一个串集. 示例: {ε, 0, 11, …}, {ε}, ∅
运算:- 和: L ⋃ M = { s ∣ s ∈ L 或 s ∈ M } L \bigcup M = \{s|s \in L 或 s \in M \} L⋃M={ s∣s∈L或s∈M}
- 连接: L M = { s t ∣ s ∈ L 且 s ∈ M } LM = \{st|s \in L 且 s \in M\} LM={ st∣s∈L且s∈M}
- 指数: L 0 = { ε } , L i = L i − 1 L L^0=\{ε\}, L^i = L^{i-1}L L0={ ε},Li=Li−1L
- 闭包: L ∗ = L 0 ⋃ L 1 ⋃ L 2 ⋃ . . . L^* = L^0\bigcup L^1\bigcup L^2\bigcup ... L∗