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

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

语法分析器或解析器也称为解析阶段。它将令牌作为词法分析器阶段的输入。语法分析器将标记组合成语法结构。这个阶段的输出是解析树。

词法分析的功能

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

  • 它可以将标记从程序中分离出来,并根据它的请求将这些标记返回给解析器。

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

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

  • 词法分析将为每个标记返回一个整数给解析器。

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

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

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

LEX 通过将 LEX 程序作为其输入来生成 Lexical Analyzer 作为其输出。LEX 程序是模式(Regular Expression)及其对应的Actions 的集合。

模式表示要被词法分析器识别并生成的标记。对于每个模式,都会设计一个相应的 NFA。

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

示例- 如果模式是 { }

P1 { }

P2 { }

Pn { }

然后对应模式的 NFA 将是 -

采用一个开始状态并使用 ϵ 转换,所有这些 NFA 都可以连接以形成组合 NFA -

每个 NFA 的最终状态表明它已经找到了它的令牌P i

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

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

如果 DFA 的最终状态包括多个 NFA 的最终状态,则最终状态对于在翻译规则中最先出现的模式具有优先权。

以上是 词法分析器的实现是什么? 的全部内容, 来源链接: utcz.com/z/363289.html

回到顶部