2016-08-18 91 views
1

當我遇到這個問題時,正在學習考試並查看過去的論文。爲什麼這個EBNF語法不明確?

下面是EBNF語法描述簡單的算術 表達式,如1 + 2 * 3 - 4:

Expression = Operand, {Operator, Operand}; 
Operand = "1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9"; 
Operator = "+"|"-"|"*"|"/"; 

(ⅳ)使用該語法中,有計算表達式的多種方式比如1 + 2 * 3 - 4。請描述其中的兩個,並解釋這個意思是關於所提供的語法的意思。 [2 marks]

據我的理解,含糊不清的語法意味着有多於一個的最左邊或最右邊的推導,這通常意味着在語法的優先順序中存在一些模糊性。但是這裏沒有優先級,遞歸是線性的。

建議?

回答

0

你有你的問題的答案的一部分。

是的;你幾乎有一個模棱兩可的語法的正確定義。它執行語法的最左邊和最右邊的派生,他們應該產生一個相同的分析樹。

是的;當你認爲這意味着語法優先順序存在問題時,你幾乎是正確的,是的,這個語法沒有任何問題。其中存在的問題是:操作員都被賦予相同的優先級,因此不同的派生將導致評估示例的不同答案。

我們可以減少1 + 2 * 3 - 4到兩種:

(1+2) * (3-4) 
1 + (2 * 3) - 4 
1 + (2 * (3 - 4)) 

取決於如何符的優先級進行處理。

如果你明確地繪製出最左邊和最右邊的縮減並因此得出分析樹,它將會更清楚。在這樣的考試問題中,這往往是學生要求的滿分。因此,我將此作爲修訂練習。