一、概述
词法分析是编译的第一个阶段。词法分析器的作用是读入源程序的输入字符,将他们组成词素,生成并输出一个词法单元序列,这个词法单元序列被输入到语法分析器进行语法分析。另外,由于语法分析器在编译器中负责读取源程序,因此,除了识别词素,它还会完成一些其他任务,比如,过滤掉源程序中的一些注释和空白,将编译器生成错误消息与源程序的位置关联起来等。
二、正则表达式
,ε
正规式也成为正则表达,也是表示正规集的工具。也是我们用于描述单词符号的方便工具,下面是正规式和他所表示的正规集的递归定义。设字母表为£,辅助字母表为£'={Φ,ε,.,*,(,)}.
(1)ε和Φ都是£上的正规式,他们所表示的正规集分别为{ε}和Φ;
(2)任何a€£上的一个正规式,它表示的正规集为{a};
(3)假定e1和e2是£上的一个正规式,它表示的正规集分别为L(e1)和L(e2),那么(e1),e1|e2,e1.e2和e*也都称为正规式,它所表示的正规集分别为L(e1),L(e1)υL(e2),L(e1)L(e2)和(L(e1))*
(4)仅有有限次使用上述三步骤而定义的表达式才是£上的正规式,仅有这些正规式所表示的字集才是£上的正规式。
其中的“|”读为“或”(也有使用“+”代替“|”的),读为“连接”,“*”读为闭包(即任意有限次的自重复连接)。在不至混淆,括号可省去,但规定算符的优先顺序为“*”,再最后“|”。连接符"."一般可省略不写。“*”、“.”和“|”都是左结合的。
三、有穷自动机
一个确定的有穷自动机M是一个五元组:M=(K,£,f,S,Z),其中
1.K是一个又穷集,它的每一个元素称为一个状态;
2.£是一个有穷字母表,它的每一个元素称为一个输入符号,所以也称£为输入符号表;
3.f是转换函数,是KX£->K上的印像,即,如f(ki,a)=kj(ki€K,kj€K)就意味着,当前状态为ki,输入字符为a时,将转换到下一状态空间,我们把kj作为称作一个后继状态;
4.S€K是唯一一个初态
5.Z包含于K,是一个终态集,终态也可成为接受状态或结束状态。
不确定的有穷自动机
一个不确定的有穷自动机M是一个五元组:M=(K,£,f,S,Z),其中
1.K是一个有穷集,它的每一个元素称为一个状态;
2.£是一个有穷字母表,它的每一个元素称为一个输入符号;
3.f是一个K*£*到K的子集印像,;即:K*£*--->2k,其中2k表示K的幂集
4.S€K是非空初态集
5.Z包含于K,是一个终态集。
确定的有穷自动机和不确定的有穷自动机的区别(参考链接):https://zhidao.baidu.com/question/129432957.html
四、NFA转化为等价的DFA
参考链接:https://blog.csdn.net/k_lawliet/article/details/79398608