簡體   English   中英

LL(1)解析表錯誤

[英]LL(1) Parsing Table Error

我首先有這個語法

E -> E + T | T
T -> id | id[] | id[X]
X -> E, E | E

顯然,第一條規則中存在左遞歸,因此我將其刪除以獲取以下內容

E  -> TE'
E' -> +TE' | epsilon
T  -> id | id[] | id[X]
X  -> E, E | E

在這里,我生成FIRSTFOLLOW集( id是單個終端)。

FIRST(TE') = FIRST(E, E) = FIRST(E) = {id}
FIRST(+TE') = {+}
FIRST(epsilon = {epsilon}
FIRST(id) = FIRST(id[]) = FIRST(id[X]) = {id}

FOLLOW(E) = {$}
FOLLOW(E') = {$}
FOLLOW(T) = {$}
FOLLOW(X) = {]}

但是,當我嘗試構造解析表時,最終得到了幾個單元格的多個值。

    |  id               |  +     | [  |  ]  |  ,  |  $  |
----+-------------------+--------+----------+-----+-----+
E   |  TE'              |        |    |     |     |     |
E'  |                   |  +TE'  |    |     |     |  ε  |
T   |id or id[] or id[X]|        |    |     |     |     |
X   |E, E or E          |        |    |     |     |     |

我想念什么嗎? 如何糾正這個問題,以便我可以使用此語法解析id + id[id + id, id[]]

即使刪除左遞歸后,您的語法也不是LL(1)。 這些產品有問題:

T -> id | id[] | id[X]
X -> E , E | E

嘗試應用以下轉換:

A -> ab_1 | ... | ab_n  ~~~~~~> A  -> aA'
                                A' -> b_1 | ... | b_n

您的情況是:

T  -> id T'
T' -> [] | [X] | epsilon

X  -> EX'
X' -> , E | epsilon

但是T'仍然需要再次應用轉換:

T  -> id T'
T' -> [ T" | epsilon
T" -> ] | X ]

完整語法:

E  -> TE'
E' -> +TE' | epsilon
T  -> id T'
T' -> [ T" | epsilon
T" -> ] | X ]
X  -> EX'
X' -> , E | epsilon

此外,您應該按照以下方式執行步驟:

1)為所有非終端計算FIRST。

2)為所有非終端計算FOLLOW。

3)計算所有產品的SELECT。 請記住,一個非終結符的SELECT集應該是不相交的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM