一、如何解决递归下降分析法存在的复杂回溯
递归下降分析法通过尝试匹配去确定,如果我们能提取获取字符串的信息,那么我们就可以提前知道更多的信息来进行语法分析,这就是预测分析法。
预测分析法不会对若干产生式进行尝试,自然也没有回溯,它会通过向前看一些记号来预测需要用到的产生式。
预测分析法接受LL(k)文法。
实际应用中,最常用的是LL(1)。
二、FIRST集与FOLLOW集
(一)FIRST集
举个例子。
(二)FOLLOW集
举个例子。
三、LL(1)文法
LL(1)文法有两个定义条件。
对于条件一。
其原因是。
对于条件二。
其原因是。
举个例子。
由此导出LL(1)文法的性质。
四、非递归的预测分析
上图是非递归的预测分析法的整体结构。该方法依赖于分析表,可以说该分析法是由分析表驱动的。
上图展示了分析表的大致结构。
构造分析表的方法是。
举个例子。
对于下面文法。
得到分析表。
然后进行预测分析。
五、多重定义
参考资料:
[1]USTC 编译原理和技术 2023 (ustc-compiler-principles.github.io)