2010-11-01 4 views
1

(tout d'abord ce n'est pas HW, j'ai toutes les réponses)grammaire BNF et l'opérateur associativité

j'ai simple grammaire BNF

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

opérateur and est associative gauche (récursif gauche) opérateur or est associative droite (cette fois-ci, il est récursive droite)

Compte tenu de l'expression c and b or not a and (not b or c), pourquoi est le plus à droite « et » est plus élevé dans l'arbre d'analyse syntaxique?
Le chemin, je vois c **and** b or not a and (not b or c) plus à gauche devrait être plus élevé dans l'arbre d'analyse. professeur

Notre fourni cette réponse:

Voici l'arbre d'analyse syntaxique dans une notation 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'))))) 
')')))) 

Répondre

1

La grammaire BNF donnée semble cohérente avec l'arbre d'analyse, et conformément à l'affirmation selon laquelle « et » est censé être laissé associatif. Si vous voulez produire "a et b et c" en utilisant cette grammaire, en commençant par "article", vous commencez ainsi:

  1. article
  2. article et Phrase

A qui point, Phrase ne peut pas devenir "b et c" (sans parenthèses) car seules les clauses peuvent produire "et". La phrase doit se développer en "c", et la Clause sur la deuxième ligne peut devenir "a et b". Cela forcera le "et" le plus à droite à être plus haut dans l'arbre d'analyse.

Étant donné que les éléments supérieurs de l'arbre d'analyse sont les derniers à être évalués, ceci est cohérent avec l'affirmation que l'opérateur "et" reste associatif.