Разбор выражения с бинарными префиксными, инфиксными и постфиксными операторами

Можно ли разобрать выражение (без двусмысленности), которое может содержать операторы бинарного префикса, бинарного инфикса и бинарного постфикса (предположим, что все символы разные) с приоритетом между ними? Например:

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

(Второй - то, что мне нужно в этой ситуации). Я не могу использовать существующие генераторы синтаксических анализаторов или фиксированную грамматику для операндов, потому что операторы загружаются динамически.


person Peter Lenkefi    schedule 10.01.2017    source источник
comment
Как бы вы справились с 2+3+4, используя только pre+ и post+? Я ищу красный флаг и смотрю на шаблоны, которые используют только pre+ и post+ рядом друг с другом.   -  person Guy Coder    schedule 10.01.2017
comment
@GuyCoder Скобки разрешены. 2+3+4 может быть до+ 2 3 4 после+   -  person Peter Lenkefi    schedule 10.01.2017
comment
@GuyCoder Может быть, должно быть правило, согласно которому, если пре+, пост+ и инфикс + имеют одинаковый приоритет, то порядок следующий: сначала пре+, затем инфикс и наконец пост+   -  person Peter Lenkefi    schedule 10.01.2017
comment
Один из самых простых способов проверить это — использовать инструмент, проверяющий двусмысленность грамматик, например ANTLR. или используйте Prolog DCG и найдите несколько ответов.   -  person Guy Coder    schedule 10.01.2017
comment
Поскольку вы разрешаете скобки (), я не вижу проблемы, потому что (2 + 3) совпадает с (pre+ 2 3), который совпадает с (2 3 post+). Если это неоднозначно без круглых скобок, просто добавьте круглые скобки.   -  person Guy Coder    schedule 10.01.2017
comment
Используются ли в вашей грамматике/выражениях *, / и -? Вы действительно должны опубликовать полную грамматику вместо примера с вопросами такого типа.   -  person Guy Coder    schedule 10.01.2017
comment
@GuyCoder Да, он будет содержать несколько операторов с разным приоритетом.   -  person Peter Lenkefi    schedule 10.01.2017
comment
У операторов pre+, post+ и + приоритет одинаковый или разный?   -  person Guy Coder    schedule 10.01.2017
comment
@GuyCoder Да, но может быть применено правило (сначала предварительно, затем в и в последнюю очередь)   -  person Peter Lenkefi    schedule 10.01.2017
comment
They do что означает? same или different приоритет. Опять же, пожалуйста, опубликуйте полную грамматику. Когда вы опубликуете полную грамматику, я посмотрю еще раз, но я действительно не предвижу никаких проблем, потому что скобки разрешены.   -  person Guy Coder    schedule 10.01.2017
comment
@GuyCoder Извините, я неправильно прочитал. У них одинаковый приоритет.   -  person Peter Lenkefi    schedule 10.01.2017
comment
@PeterLenkefi: Я не понимаю. Если имена pre+, post+ и infix+ действительно разные, то какое значение имеет их соответствующий приоритет? Но при этом невозможно, чтобы префиксный оператор и постфиксный оператор имели одинаковый приоритет. Для простоты рассмотрим только унарные операторы и посмотрим на выражение prefix operand postfix. Либо prefix, либо postfix должны связываться более плотно. (Вы можете помахать рукой по поводу ассоциативности, но в данном контексте это не очень полезно. В конце концов, один из операторов привязывается сильнее.)   -  person rici    schedule 11.01.2017
comment
@rici А что, если префикс более плотный, чем постфикс?   -  person Peter Lenkefi    schedule 11.01.2017
comment
@PeterLenkefi: с точки зрения синтаксического анализа разные символы — это разные символы. Если вы действительно имеете в виду, что имена трех вариантов оператора + различны, тогда нет причин для существования какой-либо связи между приоритетами. Однако не имеет смысла говорить, что два оператора с разным синтаксисом имеют одинаковый приоритет.   -  person rici    schedule 11.01.2017
comment
Вы до сих пор не опубликовали полную грамматику.   -  person Guy Coder    schedule 14.01.2017
comment
@GuyCoder Для него нет грамматики, поскольку операторы просто определены во время выполнения, и мы можем предположить, что атомарное выражение - это просто число или что-то еще в скобках. Я нашел это: заголовок stackoverflow.com/questions/427040/ Однако пример кода находится на ML...   -  person Peter Lenkefi    schedule 14.01.2017