Parsec.Expr Повторяющийся префиксный/постфиксный оператор не поддерживается.

Документация для Parsec.Expr.buildExpressionParserговорит:

Префиксные и постфиксные операторы с одинаковым приоритетом могут встречаться только один раз (т. е. --2 не допускается, если -является префиксом отрицания ).

и действительно, это кусает меня, поскольку язык, который я пытаюсь разобрать, допускает произвольное повторение своих префиксных и постфиксных операторов (подумайте о выражении C, подобном**a[1][2]).

Итак, почему Parsecнакладывает это ограничение и как его обойти?

Я думаю, что могу переместить мои префиксные/постфиксные синтаксические анализаторы в синтаксический анализатор term, так как они имеют наивысший приоритет.

т.е.

**a + 1

анализируется как

(*(*(a)))+(1)

, но что я мог сделать, если бы я хотел, чтобы он анализировался как

*(*((a)+(1)))

, если бы buildExpressionParserделал то, что я хочу, я мог бы просто изменить порядок операторов в Таблица.

Примечание См. здесь для лучшего решения

15
задан Community 23 May 2017 в 12:17
поделиться