ANTLR4 - определение приоритета / приоритета дочернего выражения в леворекурсивном правиле - PullRequest
0 голосов
/ 17 мая 2019

У меня есть простая леворекурсивная грамматика:

expression: primary
          | op=( '!' | '-' ) expression
          | expression op=( '/' | '*' ) expression
          | expression op=('-' | '+') expression
          | expression op=('>' | '>=' | '<' | '<=') expression
          | expression op=('==' | '!=') expression
          | expression op='and' expression
          | expression op='or' expression
          | IDENTIFIER '=' expression
          ;

Термины с более высоким приоритетом находятся около верха, термины с более низким приоритетом - около низа.

Всякий раз, когда я сопоставляю сАльтернатива, например expression op=('==' | '!=') expression, я бы хотел определить приоритет / приоритет 2 дочерних expression s в альтернативе.Так я могу проверить свое абстрактное синтаксическое дерево.

Например, a = b == a = b генерирует этот AST:

ANTLR AST

Если ямог бы определить приоритет / приоритет дочерних выражений, тогда я мог бы создать валидатор, который доказывает, что этот код логически непоследователен, потому что 2 выражения присваивания с низким приоритетом являются прямыми потомками выражения равенства с более высоким приоритетом, что недопустимо.

...