2013-02-25 105 views
1

我不太清楚如何回答我的計算機語言課程的問題。我給下面的語句轉換從EBNF形式BNF形式:將EBNF轉換爲BNF基礎知識

EBNF:expr --> [-] term {+ term}

據我瞭解,包括大括號中的表達式要重複零次或更多次,而這包括直角括號內的事情代表零個或一個選項。如果我的理解是正確的,這是否是一個正確的轉換?

我BNF:

expr --> expr - term 
     | expr + term 
     | term 

回答

2

我不認爲這是正確的。事實上,我不認爲EBNF實際上是有效的EBNF。 How to convert BNF to EBNF這個問題的答案顯示了EBNF是如何構建的,引用了ISO/IEC 14977:1996的Extended Backus-Naur Form標準。

我認爲表達:

expr --> [-] term {+ term} 

應寫:

expr = [ '-' ] term { '+', term }; 

這意味着表達由一個可選的減號,隨後term,隨後的零序列多出現一個加號和一個term

下一個問題:您選擇BNF的哪種方言?事情在這裏變得棘手;有很多方言。但是,這裏有一個可能的翻譯:

<expr> ::= [ MINUS ] <term> <opt_add_term_list> 

<opt_add_term_list> ::= /* Nothing */ 
    | <opt_add_term_list> <opt_add_term> 

<add_term> ::= PLUS term 

其中,MINUS和PLUS是終端(' - '和'+')。這是一個非常嚴峻但很小的BNF。另一種可能的翻譯將是:

<expr> ::= [ MINUS ] <term> { PLUS <term> }* 

{ ... }*部分表示零或多個包含圖案...(在本例這樣PLUS <term>)的。或者你可以使用帶引號的字符:

<expr> ::= [ '-' ] <term> { '+' <term> }* 

所以可能的替代方案列表繼續。你必須看看你被賦予工作的BNF的定義,並且你應該抱怨你被給予的非常草率的EBNF,如果它意味着是ISO標準的EBNF。如果它只是一種隨機BNF風格的語言,稱爲EBNF,我想這只是令人困惑的名字。私人方言只要定義好就可以,但方言不知道的人不可能知道正確答案是什麼。