簡體   English   中英

計算跟隨集

[英]Computing the FOLLOW sets

我的任務是為以下語法計算FIRST和FOLLOW集:

P ::= S CS .
S ::= ( int , int )
CS ::= C CS | epsilon
C ::= left int | right int | low C

我得到了以下第一套:

FIRST(S) = {'('}
FIRST(C) = {left,right,low}
FIRST(CS) = {left,right,low,epsilon}
FIRST(P) = FIRST(S) = {'('}

對於以下集合,我計算出:

FOLLOW(P) = $ (or empty)
FOLLOW(C) = {left,right,low,'.'}
FOLLOW(CS) = {'.'}
FOLLOW(S) = {left,right,low}

我嘗試使用第一個和跟隨集生成器來嘗試解決方案,得到的FOLLOW(S)是: FOLLOW(S) = {'.', left, right, low} 發電機的解決方案正確嗎?為什么? 我使用以下公式計算了解決方案: FOLLOW(S) = FIRST({left,right,low} concat FOLLOW(P)) = {left, right, low} 有人可以向我解釋為什么我/發電機的解決方案不正確,然后檢查我是否做對了所有其他事情? 我也想知道為什么我沒有intint集合,如果以后無論如何構建解析器都可以。 謝謝

計算FOLLOW集時,必須注意空生產。

在這種情況下, CS的產量為空,這意味着S后面可能有一個. P → S CS . 同樣, CC CS可能是在生產結束,所以C也跟着一個.

int只能出現在left標記或right標記之后。 它永遠不會出現在標稱終端的開頭或緊接在非終端之后。 因此,完全可以預期它不在任何FIRST或FOLLOW集合中。

暫無
暫無

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

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