第二章
2.1 扫描处理(词法分析)
任务:将源程序看作是字符文件读入,然后分为若干个单词并产生相应的记号
记号:表示一类单词(
记号类型:关键字、标识符、运算符、分隔符等
用于词法分析和语法分析
记号属性:用于语义分析(后续章节)
词法分析主要工作:
记号、单词、属性
类比面向对象编程
记号 = 类
单词 = 对象
属性 = 成员属性
正则表达式
描述、构造特定单词集合的结构的公式,一个描述单词集合的工具
Σ :字母表 – 字符的集合
字母表 Σ 上的正则表达式 r 及其所表示的集合L® 定义:
例:
i* :就是 i 的重复,而且包含了空(后续用 ф 表示空)
正则表达式的扩展
正则闭包就是没有空集。
有穷自动机
根据输入符号自动转义状态的机器,状态有限。
DFA:确定的状态自动机,适合计算机识别
NFA:未确定的自动状态机,适合人工手动推导
正则表达式到DFA的转换
使用Thopmson构造法:
a:
ε:
rs:
r | s :
r* :
例:ab | a 翻译为NFA
子集构造法
从NFA到DFA:(DFA的状态是NFA状态的子集)
1.根据NFA写出状态转移表
2.合并相同的状态构造新的状态转移表
3.根据新状态转移表构件DFA
最小化状态数
利用Lex 自动生成扫描程序
Lex:主要用于Unix系统中的扫描器自动生成程序