2010-11-01 75 views
1

(這一切首先是不是硬件,我知道所有的答案)BNF語法和操作關聯性

我有一個簡單的BNF語法

<UNIT> ::= (<CLAUSE>) | a | b | c 
<ITEM> ::= not <UNIT> | <UNIT> 
<CLAUSE> ::= <CLAUSE> and <PHRASE> | <PHRASE> 
<PHRASE> ::= <ITEM> | <ITEM> or <PHRASE> 

and運算符是左關聯的(左手遞歸) or運算符是右結合(這一次,它是右手遞歸)

鑑於表達c and b or not a and (not b or c),爲什麼是最合適的「和」是在分析樹高?
的方式,我看到c **and** b or not a and (not b or c)左邊最高應該是在解析樹中更高。

我們的教授提供了這樣的回答:

這裏是在lispy符號解析樹。

(clause (clause (clause (phrase (item (unit 'c')))) 
'and' 
(phrase (item (unit 'b')) 
'or' 
(phrase (item 'not' 
(unit 'a'))))) 
**'and'** // is higher in parse tree 
(phrase (item (unit '(' 
(clause (phrase (item 'not’(unit 'b')) 
'or' 
(phrase (item (unit 'c'))))) 
')')))) 

回答

1

給出的BNF語法看起來與解析樹一致,並且與「and」應該是左關聯的說法一致。如果你想製作「a和b和c」使用這種語法,從「條款」,你開始是這樣的:

  1. 條款
  2. 條款短語

在其中點,短語不能成爲「b和c」(無括號),因爲只有子句可以產生「和」。短語必須發展爲「c」,而第二行的條款可以變成「a和b」。這將迫使最右邊的「和」在解析樹中更高。

由於解析樹中的更高元素是最後一個評估對象,這與運算符「和」保持關聯的說法是一致的。