编译原理 - 词法分析(Lexical Analysis)

本文详细介绍了编译器的词法分析过程,包括正则式、NFA与DFA的转换、如何从正则式构建NFA、NFA转DFA并最小化,以及在实际开发中如何使用lex/flex进行词法分析。词法分析是编译器的关键步骤,它将源代码字符流转化为词法单元。
摘要由CSDN通过智能技术生成

Lexical Analysis (词法分析)

词法分析指的是将输入的字符流,按照规则划分为词法单元并向下一阶段传递。

int a = 10;

如在上面这一行代码中,按照C语言的词法划分规则可以划分为 inta=10; 这五个词法单元。

编译器在进行词法分析时,词法分析程序会依次进行:

正则表达式解读 -> 构造NFA(Thompson法) -> 构造DFA -> 最小化DFA

1. 正则式

正则式指的是对某类字符串定义的一组规则, 由符号和字母表组成,正则式中存在三种运算:连接(ab),闭包(a),选择(a|b),这三种运算的优先级为闭包>连接>选择*。

a* -> ε|a|aa|aa...
(ab)* -> ε|ab|abab...
a*b -> b|ab|aab|aa...b
(a|b)* -> ε|a/b的任意组合

有时为了方便正则式的表达,往往会对某一类正则式进行命名
letter -> [a-zA-Z]	用来表示所有的大小写字母
number -> [0-9]		用来表示所有的数字
2. NFA与DFA

在了解NFA与DFA前,应先了解有限状态自动机的定义。有限状态自动机是一种用图来表示某种算法的形式。有限状态自动机分为非确定有限自动机(NFA)确定有限状态自动机(DFA)。如状态A接受输入a转换到状态B用有限状态机表示为:


NFA指的是非确定有限状态自动机,其特点为在图中存在某一状态在接受同一种输入后,有多个不同的状态转换。如状态A接受输入a后转换为状态B、状态C。


DFA指的是确定有限状态自动机,其特点为在图中对于某一状态下的一种输入,仅可对应唯一一个状态转换。如状态A接受输入a后仅可转换到状态B,不可以转换到状态C(也可以为仅可转换到状态C,不可以转换到状态B)。
在这里插入图片描述

3. 正则式->NFA

从正则式向NFA转换常用Thompson法进行转换,在转换中三种运算对应的状态图分别为:

连接:ab,图中也可以省略ε这一步转换,直接由2接受输入b

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值