先预测接下来是哪条规则

LL中的两个L分别指从左到右读取,以及构造最左推导。分析器遇到一个待展开的非终结符时,根据后面的输入预测选择哪条产生式,再继续匹配其组成部分。

预测表可以用“非终结符加前瞻记号”查出动作。对于LL(1)文法,每个相应格子至多有一条候选产生式;没有候选可报告错误,多条候选则表示这些信息不足以直接作出唯一选择。

参考:[1]

空串影响预测信息

FIRST描述某个语法片段能够以哪些终结符开始;若片段可产生空串,预测还要考虑后续内容。FOLLOW记录非终结符后面可能出现的终结符,帮助决定何时采用空产生式。

这些集合可以通过反复传播已知信息求出。它们服务的是对文法的静态分析,不是等每条输入运行一遍以后才猜下一步;文法改动后,也应重新核对预测表是否仍无冲突。

参考:[1]

递归函数与表驱动均可实现

预测式递归下降可以用函数表达规则,也可由显式栈和表驱动代码记录待处理部分。某些原始文法需要消除左递归或提取共同前缀,才适合直接作这种预测。

使用更多前瞻不表示能解决任意文法问题;LL(k)仍对预测能力有定义上的限制。文法是否适合LL分析,应按具体产生式判断,而不是仅看语言有没有嵌套括号或代码是否使用递归函数。

参考:[1] [2]