为什么要提前查看最多1个输入令牌?

时间:2015-08-29 13:28:32

标签: parsing lookahead ll

我目前正在尝试实现LL解析器,但我有一个问题。 需要我向前看最多1个输入令牌,以验证用户的输入 在语法上是正确的还是出于另一个原因?

1 个答案:

答案 0 :(得分:2)

有许多不同类型的解析算法。您正在描述的那个称为LL(1),根据定义,它只使用一个前瞻标记。但是,还有其他解析算法使用比此更多的前瞻。例如,LL(2)解析器使用两个前瞻标记,LL(*)解析器具有无限前瞻。有一个语法,其中一个前瞻标记是不够的(即,LL(2)但不是LL(1)的语法)。这是一个例子:

  

S→n | n + S

尝试弄清楚为什么一个前瞻标记不够,但两个标记就足够了。

解析算法试图保持前瞻令牌数量较少的原因是为了简化和提高效率。随着前瞻令牌数量的增加,驱动解析器所需的解析表的大小也会增加,构建这些表的复杂性也会增加。