词法分析器的实现是什么?
词法分析是编译器的第一步,它一次读取源代码一个字符,并将其转换为令牌数组。令牌是程序中具有意义的字符集合。这些令牌可以是关键字,包括 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 的最终状态,则翻译规则中第一个出现的模式的最终状态具有优先级。
数据结构
网络
关系型数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP