Я делаю домашнее задание, где я даю некоторую грамматику BNF:
<assign> -> <id> = <expr>
<id> -> A | B | C
<expr> -> <expr> + <term>
| <term>
<term> -> <term> * <factor>
| <factor>
<factor> -> ( <expr> )
| <id>
и вопрос:
«Перепишите эту грамматику так, чтобы оператор +
был правоассоциативным и имел приоритет над оператором *
».
Одноклассник предложил просто поменять местами операторы +
и *
, и тогда +
будет иметь приоритет и получит правильную ассоциацию, однако я не думаю, что это правильно, поскольку вопрос рекурсивный.
Мой вопрос: получает ли оператор +
приоритет и правильную ассоциацию, просто переключая его с оператором *
? У меня две мысли: удалить рекурсию и сделать то, что предлагает мой одноклассник, или поставить оператор +
в состояние, при котором он должен быть окружен (
и )
для работы.
Может быть, я слишком много думаю об этом?
+
и*
в грамматике явно поменяет приоритет, но сделать их правоассоциативными — это отдельный шаг - person Mooing Duck   schedule 18.02.2015A = B * (C + (C + (C + C)))
- person Ryan Tibbetts   schedule 18.02.2015