什么是递归下降分析器?


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

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

如果在有效地执行过程调用的语言中编写,则递归过程可以很容易编写并且足够有效。语法中的每个非终结符都有一个过程。它可以考虑一个全局变量 lookahead,保存当前的输入标记,以及一个过程 match(预期标记),这是在解析过程中识别下一个标记并推进输入流指针的动作,使得 lookahead 指向要解析的下一个标记。Match() 有效地调用词法分析器来获取下一个标记。

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

lookahead == a

match()

lookahead == +

match ()

lookahead == b

……………………….

……………………….

通过这种方式,可以完成解析。

示例 - 在以下语法中,第一个符号,即 if、while 和 begin 唯一地确定了要选择的备选方案。

因为以 if 开头的语句将是条件语句,而以 while 开头的语句将是迭代语句。

                                                Stmt → If condition then Stmt else Stmt

                                                             | While condition do Stmt

                                                             | begin Stmt end.

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

E → TE′

E′ → +TE′

T → FT′

T′ →∗ FT′|ε

F → (E)|id

递归下降分析的一个主要缺点是它只能在支持递归过程调用的语言中实现,并且它存在左递归问题。

更新于: 2021年10月30日

34K+ 浏览量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告