Вопрос

(Во-первых, это не HW, у меня есть все ответы)

У меня простая грамматика 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 ) Слева большинство должно быть выше в дереве разбора.

Наш профессор предоставил этот ответ:

Вот дерево разбора в закладной обозначении.

(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')))))
')' ))))
Это было полезно?

Решение

Данная грамматика BNF представляется в соответствии с деревом разбора и соответствует утверждению о том, что «и» должен быть ассоциативный. Если вы хотите создать «A и B и C», используя эту грамматику, начиная с «поколения», вы начинаете следующие:

  1. Пункт
  2. Пункт а также Фраза

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top