Можно ли разобрать выражение (без двусмысленности), которое может содержать операторы бинарного префикса, бинарного инфикса и бинарного постфикса (предположим, что все символы разные) с приоритетом между ними? Например:
a = 2 3 post+
b = pre+ 2 3*4
Тогда a
будет равно 5, потому что =
имеет более низкий приоритет, чем постфиксный оператор post+
, а b
будет 14
. Я знаю, что вы можете анализировать выражения с инфиксной нотацией с помощью разбора приоритета оператора или маневровой станции, но эта проблема кажется мне гораздо более сложной.
Редактировать:
Допускаются круглые скобки, а пре-/пост-варианты оператора имеют тот же приоритет, что и инфиксный.
Хотелось бы накатить написанный от руки алгоритм.
Редактировать2:
Под приоритетом я подразумеваю, сколько потреблять. Например это:
a = 2 3 post+
Может привести к этим AST-s:
'=' has higher precedence than 'post+':
post+
/ \
= 3
/ \
a 2
'post+' has higher precedence than '=':
=
/ \
a post+
/ \
2 3
(Второй - то, что мне нужно в этой ситуации). Я не могу использовать существующие генераторы синтаксических анализаторов или фиксированную грамматику для операндов, потому что операторы загружаются динамически.
2+3+4
, используя толькоpre+
иpost+
? Я ищу красный флаг и смотрю на шаблоны, которые используют толькоpre+
иpost+
рядом друг с другом. - person Guy Coder   schedule 10.01.2017()
, я не вижу проблемы, потому что(2 + 3)
совпадает с(pre+ 2 3)
, который совпадает с(2 3 post+)
. Если это неоднозначно без круглых скобок, просто добавьте круглые скобки. - person Guy Coder   schedule 10.01.2017*
,/
и-
? Вы действительно должны опубликовать полную грамматику вместо примера с вопросами такого типа. - person Guy Coder   schedule 10.01.2017pre+
,post+
и+
приоритет одинаковый или разный? - person Guy Coder   schedule 10.01.2017They do
что означает?same
илиdifferent
приоритет. Опять же, пожалуйста, опубликуйте полную грамматику. Когда вы опубликуете полную грамматику, я посмотрю еще раз, но я действительно не предвижу никаких проблем, потому что скобки разрешены. - person Guy Coder   schedule 10.01.2017pre+
,post+
иinfix+
действительно разные, то какое значение имеет их соответствующий приоритет? Но при этом невозможно, чтобы префиксный оператор и постфиксный оператор имели одинаковый приоритет. Для простоты рассмотрим только унарные операторы и посмотрим на выражениеprefix operand postfix
. Либоprefix
, либоpostfix
должны связываться более плотно. (Вы можете помахать рукой по поводу ассоциативности, но в данном контексте это не очень полезно. В конце концов, один из операторов привязывается сильнее.) - person rici   schedule 11.01.2017+
различны, тогда нет причин для существования какой-либо связи между приоритетами. Однако не имеет смысла говорить, что два оператора с разным синтаксисом имеют одинаковый приоритет. - person rici   schedule 11.01.2017