Всем привет. Может кто-нибудь подсказать по yecc?
Есть такой кусок грамматики:
Left 100 'or'.
Left 200 'and'.
expression -> expression space_value 'or' space_value expression : {'or', '$1', '$5'}.
expression -> expression space_value 'and' space_value expression : {'and', '$1', '$5'}.
При этом приоритеты не срабатывают. То есть выражение вида "Expression1 and Expression2 or Expression3 and Expression4" должно стать таким деревом:
{'or',
{'and', Expression1, Expression2},
{'and', Expression3, Expression4}
}
Вместо этого получается такое дерево:
{'and',
{'or', {'and', Expression1, Expression2}, Expression3},
Expression4
}
Но если убрать пробелы (space_value), то все нормально, приоритеты отрабатывают.
Может кто-нибудь объяснить почему так происходит?