2017-04-22 50 views
0

我試圖解決這個問題,但我真的不知道如何開始。我希望得到一些幫助。如何表明,位運算符語法是不明確的使用表達式a >> B^C

位運算符用於語言示於下表中的語法旁邊。操作符和語法規則按照從高到低的順序排列。字符a,b和c表示語言中的終端。

語法表:

Grammar table

  1. 表明語法是使用表達含糊:一個>> B^C
  2. 重寫語法,以便它是明確的。
+0

我認爲這是不明確的,因爲它可能被視爲(a >> b)^ c或a >>(b^c)而不知道語言操作符的優先級。只需使用括號來明確評估順序,以便人們不必猜測。 – Shiping

回答

0

龍書說:「對一些句子生產超過一個剖析樹文法被說成是曖昧」。因此,要顯示語法不明確,您需要爲語法生成的單個語句顯示至少兩個分析樹。在這種情況下,用一句話已經給你,所以你Q1只需要找到兩個不同的分析樹爲a >> b^c。施平的評論給你一個很大的線索。

對於Q2,在那裏他們會問你「重寫語法」,我懷疑潛要求是,所產生的語法產生完全相同的語言與原始。 (因此,施平的建議是將括號引入到該語言中)。這樣做的一般方法是在優先級圖表中爲每個優先級別引入一個非終結符,然後修改語法規則以在這種情況下使用新的非終結符語法只能生成尊重優先級圖表的解析樹。

例如,看看你發現Q1的兩棵樹。您應該觀察到其中一個符合優先級圖表,另一個不符合優先級圖表。你需要一個新的語法來允許符合優先順序的樹而不是另一個。

至於另一條線索,考慮這兩個文法的區別:

E -> E + E 
E -> E * E 
E -> a | b 

E -> E + T 
T -> T * F 
F -> a | b 

儘管它們產生相同的語言,首先是模糊的,但第二個不是。

相關問題