2010-11-01 4 views
1

(в первую очередь это не HW, у меня есть ответы на все вопросы)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 дается, кажется в соответствии с синтаксического дерева, и в соответствии с утверждением, что «и» должен быть левоассоциативной. Если вы хотите, чтобы произвести «а и Ь и с» использованием этой грамматики, начиная с «п», вы начинаете так:

  1. Пунктом
  2. Clause и Фразу

, на которой точка, фраза не может стать «b и c» (без круглых скобок), потому что только предложения могут создавать «и». Фраза должна развиваться в «c», а статья на второй строке может стать «a и b». Это заставит самого правого «и» быть выше в дереве разбора.

Поскольку более высокие элементы в дереве разбора оцениваются последними, это согласуется с утверждением о том, что оператор «и» остается ассоциативным.