簡體   English   中英

LL(1) 語法解析表

[英]LL(1) Parsing table with grammar

我正在嘗試使用下面的語法獲取 LL(1) 解析表,

S -> ( L ) | a
L -> L , S | S

我認為因此它具有間接左遞歸,

L -> S

所以我把它改成

S -> ( L ) | a
L -> L , ( L ) | L , a | ( L ) | a

然后像這樣

S -> ( L ) | a
L -> ( L ) L' | aL'
L' -> , ( L ) L' | ,aL' | epsilon

有了這個,我得到了 FIRSTs 和 FOLLOWs

FIRST(S) = { (, a }          FOLLOW(S) = { $ }
FIRST(L) = { (, a }          FOLLOW(L) = { ) }
FIRST(L') = { , , epsilon}   FOLLOW(L') = { ) }

但是當我繪制LL解析表時,它不會轉到$。

我有沒有弄錯或誤解?

(我的解析理論是生疏的,所以我可能在這里犯了一些錯誤。)

L -> S是間接遞歸的一部分,但不是左遞歸。 產生式只能“擴展”為L ->+ ( L )L ->+ a ,兩者都以終端開頭。 這里唯一的左遞歸是在產生式L -> L , S 刪除這個直接左遞歸后,我最終得到以下語法:

S -> ( L ) | a
L -> S L'
L' -> , S L' | ε

這樣,您計算的FIRSTFOLLOW集是相同的,只是FOLLOW(S)是不完整的。 除了$ (因為S是開始狀態), FOLLOW(S)必須包括FIRST(L') (因為L -> S L'L' -> , S L' )和FOLLOW(L') (因為L' -> ε )。 我得到FOLLOW(S) = { $, ,, ), ε }

我得到的解析表如下:

    |  (     |  a     |  ,       |  )  |  $  |
----+--------+--------+----------+-----+-----+
S   |  L )   |  a     |          |     |     |
L   |  S L'  |  S L'  |          |     |     |
L'  |        |        |  , S L'  |  ε  |     |

我不確定你所說的“它不會去$ ”是什么意思。 我只能說$列是空的,因為S所有產生式都是非空的並且以終端結尾。

暫無
暫無

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

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