БНФ грамматика и ассоциативность оператора
-
27-09-2019 - |
Вопрос
(Во-первых, это не 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», используя эту грамматику, начиная с «поколения», вы начинаете следующие:
- Пункт
- Пункт а также Фраза
В какой момент фраза не может стать «B и C» (без скобок), потому что только предложения могут производить «и». Фраза должна развиваться в «C», а предложение на второй линии может стать «а и б». Это заставит самого правого »и« быть выше в дереве разбора.
Поскольку более высокие элементы в дереве разбора - это последнее, что это соответствует утверждению, что оператор «и» оставлен ассоциативным.