词法分析器的实现是什么?


词法分析是编译器的第一步,它一次读取源代码一个字符,并将其转换为令牌数组。令牌是程序中具有意义的字符集合。这些令牌可以是关键字,包括 do、if、while 等,以及标识符,包括 x、num、count 等,以及运算符符号,包括 >、>=、+ 等,以及标点符号,包括括号或逗号。词法分析阶段的输出传递到下一个阶段,称为语法分析器或解析器。

语法分析器或解析器也称为解析阶段。它从词法分析阶段获取令牌作为输入。语法分析器将令牌组合成语法结构。此阶段的输出是语法树。

词法分析的功能

词法分析的主要功能如下:

  • 它可以从程序中分离令牌,并在解析器请求时将其返回给解析器。

  • 它可以消除字符串中的注释、空格、换行符等。

  • 它可以将令牌插入符号表。

  • 词法分析将为解析器中的每个令牌返回一个整数。

  • 去除注释和空格(制表符、换行符、空格和其他用于分隔输入中令牌的字符)。

  • 编译器在词法分析器期间生成的与源程序相关的错误消息。

  • 它可以在宏的情况下实现宏的扩展,在源代码中使用预处理器。

LEX 通过获取 LEX 程序作为输入来生成词法分析器作为输出。LEX 程序是模式(正则表达式)及其对应动作的集合。

模式表示要由生成的词法分析器识别的令牌。对于每个模式,都将设计一个对应的 NFA。

对于 n 个模式,可以有 n 个 NFA。

示例 - 如果模式为 { }

P1 { }
P2 { }
Pn { }

则对应模式的 NFA 将为 -

取一个起始状态,并使用 ϵ 转换,所有这些 NFA 都可以连接起来以创建组合 NFA -

每个 NFA 的最终状态表明它已找到其令牌 Pi

它将组合 NFA 转换为 DFA,因为使用程序模拟 DFA 的行为总是很容易的。

最终状态显示我们找到了哪个令牌。如果 DFA 的任何状态都不包含 NFA 的任何最终状态,则控制权将返回到错误条件。

如果 DFA 的最终状态包含多个 NFA 的最终状态,则翻译规则中第一个出现的模式的最终状态具有优先级。

更新于:2021年10月26日

10K+ 浏览量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.