BNF grammaire et l'opérateur associativité
-
27-09-2019 - |
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')))))
')' ))))
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:
- Article
- 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.