回溯和非回溯有什么区别?
自上而下的回溯分析
在Top-DownParsingwithBacktracking中,Parser将尝试多个规则或产生式,通过在推导的每一步进行回溯来发现输入字符串的匹配项。因此,如果使用的产生式没有根据需要提供输入字符串,或者它与所需的字符串不匹配,那么它可以撤消该移位。
自上而下的解析,无需回溯
由于回溯看起来更强大,我们可以通过它选择不同的替代方案。但是在解析中不能那么容易地应用或实现回溯。有两种没有回溯的自顶向下解析,如下所示-
递归下降解析器
预测解析器
递归下降解析器
实现一组递归过程来处理输入而不回溯的自顶向下解析器被称为递归下降解析器,解析被称为递归下降解析。如果以有效执行过程调用的语言编写,递归过程可以简单地编写并且充分有效。
文法中的每个非终结符都有一个过程。可以考虑一个全局变量lookahead,持有当前输入的token和一个过程匹配(ExpectedToken)是解析过程中识别下一个token并推进输入流指针的动作,使得lookahead指向下一个要处理的token解析。Match()实际上是调用词法分析器以获取下一个标记。
预测解析器
预测解析器也称为非递归预测解析。预测解析器是一种通过显式处理活动记录堆栈来执行递归下降解析的有效方法。预测解析器具有输入、堆栈、解析表和输出。输入包括要解析的字符串,后跟$,即右端标记。
堆栈包括一系列语法符号,前面是$,堆栈底部标记。最初,堆栈包含以$开头的语法的起始符号。解析表是一个二维数组M[A,a],其中'A'是一个非终结符,'a'是一个终结符或符号$。
让我们看看有回溯的自顶向下解析和没有回溯的自顶向下解析之间的比较