什么是 LEX?

它是一种自动生成词法分析器(有限自动机)的工具或软件。它将 LEX 源程序作为其输入,并生成词法分析器作为其输出。词法分析器会将用户输入的输入字符串转换为标记作为其输出。

LEX 是为字符输入/输出流的词法处理而设计的程序生成器。从在其输入输出文件中查找模式的简单文本搜索程序到将程序转换为优化代码的 C 编译器,应有尽有。

在具有输入输出结构的程序中,两个任务一遍又一遍地发生。它可以将输入输出划分为有意义的单元,然后为 C 程序发现单元之间的关系(单元是变量名、常量和字符串)。这种对单元(称为标记)的划分称为词法分析器或 LEXING。LEX 通过获取一组可能的标记 n 的描述来帮助生成一个称为词法分析器或 LEXER 或 Scanner 的例程。

LEX 源程序

它是一种用于指定或表示词法分析器的语言。

LEX 源程序有两个部分 -

  • 辅助定义

  • 翻译规则

  • 辅助定义

它表示表单的正则表达式。

不同的名称 $\begin{bmatrix}D_{1} & =\:\:R_{1} \\D_{2} & =\:\:R_{2} \\D_{n} &= \:\: R_{n} \end{bmatrix}$正则表达式

在哪里

  • Distinct Names (D i )→ 正则表达式的快捷方式名称

  • 正则表达式 (R i )→ 表示输入符号集合的符号。

例子

标识符的辅助定义 -

有符号数的辅助定义

整数=数字数字*

符号 = + | -

有符号整数 = 符号整数

十进制数的辅助定义

十进制 = 有符号整数。整数 | 符号.整数

指数数的辅助定义

指数 – 否 = (十进制 | 有符号整数) E 有符号整数

实数的辅助定义

实数 = 十进制 | 指数 - 否

  • 翻译规则

它是一组规则或动作,告诉词法分析器在遇到令牌时它必须做什么或必须返回解析器。

它由以下形式的陈述组成 -

P1 {Action1}
P2 {Action2}
.
.
.
Pn {Actionn}

在哪里

P i → 由输入字母和辅助定义名称组成的模式或正则表达式。

动作i → 这是一段代码,只要识别出一个令牌就会执行。当每个正则表达式或模式P i与输入字符串匹配时,每个 Actioni 都指定一组要执行的语句。

例子

“关键词”的翻译规则

我们可以看到,如果给词法分析器输入“begin”,它将识别标记“begin”,并且词法分析器会将 1 作为整数代码返回给解析器。

“标识符”的翻译规则

letter (letter + digit)* {Install ( );return 6}

如果给词法分析器一个“标识符”的标记,那么词法分析器采取的行动是将名称安装或存储在符号表中,并将值 6 作为整数代码返回给解析器。