什么是递归下降解析器?

递归下降" title="递归下降">递归下降解析器使用自顶向下解析的技术,无需回溯。它可以定义为一个使用各种递归过程来处理输入字符串而不回溯的解析器。它可以使用递归语言简单地执行。生产的 RHS 字符串的第一个符号将唯一地确定要选择的正确替代方案。

递归下降解析的主要方法是将每个非终结符与一个过程相关联。每个过程的目标是读取可以由相应的非终结符生成的输入字符序列,并为非终结符返回指向解析树根的指针。该过程的结构由等效非终结符的产生式规定。

如果以有效执行过程调用的语言编写,递归过程可以简单地编写并且足够有效。语法中的每个非终结符都有一个过程。它可以考虑一个全局变量lookahead,持有当前输入token和一个过程匹配(Expected Token)是在解析过程中识别下一个token并推进输入流指针的动作,使得lookahead指向下一个token解析。Match() 实际上是对词法分析器的调用以获取下一个标记。

例如,输入流是 a + b$。

前瞻 == 一个

match()

前瞻 == +

匹配 ()

前瞻 == b

…………………………。

…………………………。

这样就可以进行解析了。

示例- 在以下语法中,第一个符号,即 if、while & 开始唯一地确定选择哪个替代方案。

As 以 if 开头的语句将是一个条件语句,而以 while 开头的语句将是一个迭代语句。

                                                Stmt → If 条件 then Stmt else Stmt

                                                             | 而条件做Stmt

                                                             | 开始 Stmt 结束。

示例- 使用递归过程写下算法以实现以下语法。

E → TE′

E′ → +TE′

T → FT′

T′ →∗ FT′|ε

F → (E)|id

递归下降解析的主要缺点之一是它只能用于那些支持递归过程调用的语言,并且存在左递归问题。

以上是 什么是递归下降解析器? 的全部内容, 来源链接: utcz.com/z/363361.html

回到顶部