2016-11-03 30 views
-1

這個練習有點問題。編譯器:改變模糊文法

鑑於這種語法:

S -> aX | X 
X -> aXb | b | eps 

a)所示,它是模糊的一個字符串

B)說什麼語言捕捉語法

三)改變語法和構建後裔解析器

我的解決方案:

a)我給出了曖昧與字符串「AB」:

- S -> aX -> ab 
- S -> X -> aXb -> ab 

二)語法抓住了這個語言:

L = {a^n b^n: n >= 0} U {a^n b^m: n=m+1, n,m >= 0} U {a^n b^m: m=n+1, n,m >= 0} 

C)我的問題是改變語法來構建解析器。我嘗試了不同的語法,但它們也不明確。 例如這樣的:

- G -> X$ 
    X -> aX' | b | eps 
    X' -> XB | eps 

你能幫我找到了鍛鍊正確的語法,或給我輸入?

回答

-1

作爲you.undoubtedly知道,

S -> X | a S b 

可以被描述爲 「被相同數目的a S和b小號環繞X的實例」 的語言。 X這裏是遞歸的基礎。

正如您所建立的那樣,目標語言的每個字母都有相同的數字,或者多個一個字母。所以我們可能會問,「X的簡單定義能產生這種語言嗎?」

+0

生產可能是X - > a |灣但是對於這種生產,語法會在解析表格時產生衝突以進行自頂向下的解析。你認爲另一種生產? – Federico

+0

@federico:實際上,它必須是'X - > a | b | ε';否則,平衡的字符串將不可能。這是明確的,但不是LL(k)。 (它也不是LR(k))。LL(1)語法比較棘手,但可能;考慮將語言解構爲前綴和最大(有限)長度後綴。 – rici