原文地址:编译原理 词法分析
编译原理
词法分析
词法分析的主要任务是从左至右逐个字符地对源程序进行扫描,产生一个个单词序列,用于语法分析。
1.正则表达式
对给定的字符集∑={c1,c2,...,cn},归纳定义:
1.空串ε是正则表达式
2.对于任意c∈∑,c是正则表达式
3.如果M和N是正则表达式,则下列表达式也是正则表达式
(1)选择 M|N={M,N}
(2)连接 MN={mn|m∈M,n∈N}
(3)闭包 M*={ε,M,MM,MMM,...}
2.正则表达式的扩展
(1)[c1-cn]==c1|c2|c3|...|cn
(2)e+==一个或多个e
(3)e?==零个或一个e
(4)"a*"==a*自身,不是a的Kleen闭包
(5)e{i,j}==i到j个e的连接
3.状态转换图
状态转换图有一组被称为“状态”的结点或圆圈。词法分析器在扫描输入串的过程中寻找和某个模式匹配的词素,而
转换图中的每个状态代表一个可能在这个过程中出现的情况。
对于
的状态转换图为
4.有穷自动机
有穷自动机是识别器,只能对每个可能的输入串简单地回答“是”或“否”。
(1)有穷自动机分两种
1)不确定的有穷自动机(NFA):对其边上的标号没有任何限制。一个符号标记离开同一状态的多条边,
并且空串ε也可以作为标号。
2)确定的有穷自动机(DFA):对于每个状态及自动机输入字母表中的每个符号,有且只有一条离开该状态、以该符
号为标号的边。
(2)不确定的有穷自动机(NFA)
一个不确定的有穷自动机(NFA)由以下几个部分组成:
1)一个有穷的状态集合S。
2)一个输入符号