词法分析器和lex工具基本学习

690 篇文章 11 订阅 ¥99.90 ¥299.90
80 篇文章 0 订阅
本文介绍了词法分析在编译过程中的作用,词法分析器(Lexer或Scanner)的功能,以及词法分析器如何使用Lex工具自动生成。词法分析通过有限状态自动机(DFA)进行,Lex将输入的模式转换为状态转换图,生成C代码实现。正则表达式在词法定义中的应用和Lex的常规表达式规则也在文中得到阐述。
摘要由CSDN通过智能技术生成

词法分析

lexical analysis,是计算机科学中将字符序列转换为单词(Token)序列的过程。
进行词法分析的程序或者函数叫作词法分析器(Lexical analyzer,简称Lexer),也叫扫描器(Scanner)。
词法分析器供语法分析器调用。

词法分析阶段是编译过程的第一个阶段,是编译的基础。
这个阶段的任务是从左到右一个字符一个字符地读入源程序,即对构成源程序的字符流进行扫描然后根据构词规则识别单词(也称单词符号或符号)。
词法分析程序可以使用Lex等工具自动生成。

编译程序把一个源程序翻译成目标程序的工作过程分为五个阶段:词法分析;语法分析;语义检查和中间代码生成;代码优化;目标代码生成。

从输入字符流中生成单词的过程叫作单词化(Tokenization),在这个过程中,词法分析器还会对单词进行分类。

词法分析器通常不会关心单词之间的关系(属于语法分析的范畴),例如,词法分析器能够将括号识别为单词,但并不保证括号是否匹配。

单词经常使用正则表达式进行定义,像lex一类的词法分析器生成器就支持使用正则表达式。

词法分析的第一阶段即扫描器,通常基于有限状态自动机。

开发一个词法分析器是在词法定义的基础上的,词法定义需要使用正则表达式
正则表达式可以转换为NFA(Non-determinate finite automata 不确定的有穷自动机)
NFA可以转换为DFA(determinate finite automata确定的有穷自动机)
DFA可以极小化,进而使用为开发词法分析器的工具

DFA的正式定义
    一个DFA定义了一个字符串集合
    每个字符串是一个字符的序列,字符属于∑
    起始状态给出生成字符串的起始点
    终端状态给出了终点
    转换函数制定了生成字符串的规则

Lex 基本

Lex编译器将输入的模式转换成一个状态转换图,并生成相应的实现代码,并存放到文件lex.yy.c中。

Lex 的常规表达式

常规表达式是一种使用元语言的模式描述。表达式由符号组成。符号一般是字符和数字,但是 Lex 中还有一些具有特殊含义的其他标记。 下面两个表格定义了 Lex 中使用的一些标记并给出了几个典型的例子。

用 Lex 定义常规表达式

字符    含义
A-Z, 0-9, a-z    构成了部分模式的字符和数字。
.    匹配任意字符,除了 \n。
-    用来指定范围。例如:A-Z 指从 A 到 Z 之间的所有字符。
[ ]    一个字符集合。匹配括号内的 任意 字符。如果第一个字符是 ^ 那么它表示否定模式。例如: [abC] 匹配 a, b, 和 C中的任何一个。
*    匹配 0个或者多个上述的模式。
+    匹配 1个或者多个上述模式。
?    匹配 0个或1个上述模式。
$    作为模式的最后一个字符匹配一行的结尾。
{ }    指出一个模式可能出现的次数。 例如: A{1,3} 表示 A 可能出现1次或3次。
\    用来转义元字符。同样用来覆盖字符在此表中定义的特殊意义,只取字符的本意。
^    否定。
|    表达式间的逻辑或。
"<一些符号>"    字符的字面含义。元字符具有。
/    向前匹配。如果在匹配的模版中的“/”后跟有后续表达式,只匹配模版中“/”前 面的部分。如:如果输入 A01,那么在模版 A0/1 中的 A0 是匹配的。
( )    将一系列常规表达式分组。

常规表达式举例

常规表达式    含义
joke[rs]    匹配 jokes 或 joker。
A{1,2}shis+    匹配 AAshis, Ashis, AAshi, Ashi。
(A[b-e])+    匹配在 A 出现位置后跟随的从 b 到 e 的所有字符中的 0 个或 1个。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值