Question

(tout d'abord ce n'est pas HW, j'ai toutes les réponses)

Je 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
D'ailleurs, je vois c **and** b or not a and ( not b or c ) plus à gauche devrait être plus élevé dans l'arbre parse.

Notre professeur a 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')))))
')' ))))
Était-ce utile?

La solution

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 quel point, expression ne peut pas devenir « b et c » (sans parenthèses), car seules les clauses peuvent produire « et ». Phrase doit se développer en « c », et la clause sur la deuxième ligne peut devenir « a et b ». Cela forcera le plus à droite « et » être plus élevé dans l'arbre parse.

Comme éléments plus élevés dans l'arbre Parse sont les derniers à évaluer, ce qui est conforme à l'affirmation selon laquelle l'opérateur « et » est associative gauche.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top