Parsec.Expr повторный оператор префикса / постфикса не поддерживается
Документация дляParsec.Expr.buildExpressionParser
говорит:
Prefix and postfix operators of the same precedence can only occur once (i.e. --2 is not allowed if - is prefix negate).
и действительно, это кусает меня, так как язык, который я пытаюсь разобрать, позволяет произвольное повторение его префиксных и постфиксных операторов (вспомните выражение C, например**a[1][2]
).
Итак, почемуParsec
сделать это ограничение, и как я могу обойти это?
Я думаю, что я могу переместить мои префиксные / постфиксные парсеры вниз вterm
синтаксический анализатор, так как они имеют самый высокий приоритет.
то есть
<code>**a + 1 </code>
анализируется как
<code>(*(*(a)))+(1) </code>
но что бы я мог сделать, если бы захотел разобрать как
<code>*(*((a)+(1))) </code>
еслиbuildExpressionParser
сделал то, что я хочу, я мог бы просто изменить порядок операторов в таблице.
Note УвидетьВот для лучшего решения