LL(1)解析表中的$ column下的条目是否必要?

时间:2015-02-07 15:28:09

标签: parsing compiler-construction grammar context-free-grammar

对于编程语言的LL(1)语法,是否有必要在$ in in parse表的列下获得至少一个条目。

如果是,我们可以在语法中查找可能的错误。

1 个答案:

答案 0 :(得分:1)

$(输入结束)列可能为空。发生这种情况的一类语法是S的所有产品都是非空的并以终端结束。

让我们以S -> ( S* )为例,或者更明确地说明一下:

  1. S -> ( T )
  2. T -> S T
  3. T -> ε
  4. 我们可以为这个语法构建以下LL(1)解析表:

       |  (      |  )  |  $  |
    ---+---------+-----+-----+
    S  |  ( T )  |     |     |
    T  |  S T    |  ε  |     |
    

    请记住,LL解析器堆栈包含终端和非终端。如果输入和堆栈以相同的终端开始,则它们都被移除。对于输入的结尾(通常表示为特殊终端)也是如此:当且仅当我们到达输入的末尾并且我们的解析器堆栈为空时,解析已成功完成。

    我能想到的$列唯一明智的条目是ε。毕竟,如果堆栈上有任何(非空)终端,则无法解析空字符串。当$列包含某个终端的ε时,这意味着当您到达输入结束时可以将其从堆栈中删除。在我们的例子中,我们没有理由允许这样做。