编译器设计中的解析技术是什么?
解析被称为语法分析。它包含将标记作为源代码排列成语法阶段,编译器使用这些阶段来合成输出,通常源代码的语法阶段由语法树定义。有各种类型的解析技术,如下所示:
- 自顶向下解析器
它从根到叶生成语法树。在自顶向下解析中,解析从开始符号开始,并将其更改为输入符号。
自顶向下解析器的示例包括预测解析器、递归下降解析器。
预测解析器 - 预测解析器也称为非递归预测解析。预测解析器是通过显式操作激活记录栈来实现递归下降解析的有效方法。预测解析器具有输入、栈、解析表和输出。输入包括要解析的字符串,后跟 $,即右端标记。
递归下降解析器 - 一种自顶向下解析器,它执行一组递归过程来处理输入而无需回溯,称为递归下降解析器,解析称为递归下降解析。
- 自底向上解析器
它为给定的输入字符串从叶到根生成语法树。在语法中,输入字符串将被简化为起始符号。
自底向上解析器的示例包括移进规约解析器、运算符优先级解析器和 LR 解析器。
移进规约解析器 - 移进规约解析器是一种自底向上解析器。它使用栈来影响语法符号。解析器继续将输入符号更改到栈上,直到栈顶出现一个句柄。当栈顶出现一个句柄时,它执行规约。
运算符优先级解析器 - 移进规约解析器可以手动为一小类语法生成。这些语法具有以下属性:右侧没有 ϵ 或没有两个相邻的非终结符。具有后一种属性的语法称为运算符语法。
LR 解析器 - LR 解析器是一种移进规约解析器,它使用确定性有限自动机,通过从下到上读取栈来识别所有可行前缀的集合。它决定是否有句柄可用。
右句型的可行前缀是指包含句柄但句柄右侧没有符号的前缀。因此,如果生成了一个识别右句型可行前缀的有限状态机,它就可以指导移进规约解析器中的句柄选择。
有三种类型的 LR 解析器,如下所示:
简单 LR 解析器 (SLR) - 它非常易于实现,但它无法为某些类别的语法生成表。
规范 LR 解析器 (CLR) - 它功能最强大,适用于大量语法。
前瞻 LR 解析器 (LALR) - 它的功能介于 SLR 和 CLR 之间。