先看后面的记号再决定
分析器在当前结构尚有多种可能时,可以先查看后面的记号。LLVM示例在读到标识符后检查下一个记号是否为左括号,分别构造函数调用或变量引用节点。
这里查看的是词法记号,不是固定数量的原始字符。一个很长的名字仍可作为一个记号;注释或空白的处理又由词法规则决定,因此一个记号的前瞻不等于只看一个字节。
前瞻与当前状态配合
LL预测表根据待展开的非终结符和前瞻选择产生式。某个分支可以产生空串时,还需考虑它后面的允许记号,不能只检查这条分支是否有一个能直接匹配输入的首项。
LR分析把前瞻与状态栈结合,在继续移进或进行归约之间作选择。读入一个记号以供判断,不意味着所有此前结构都已结束;分析器可以先完成必要归约,再把相应输入纳入下一步状态。
更多前瞻不等于任意能力
LL(k)的k表示预测所需的前瞻规模。增加k可能区分某些共同前缀,也会增加表构造和存储复杂度;输入缓冲怎样实现,又是另一项工程选择。
前瞻长度并不单独决定分析器能否处理所有文法。文法变换、状态合并方式、回溯或其他策略都会影响能力;应按具体算法与规则判断,而不是把“看得更远”当作万能消歧办法。