Я пытаюсь заставить простую грамматику работать с использованием ANTLR4.В основном это список ключевых слов, разделенных ;
, которые можно отменить, используя Not
.Примерно так, например:
Not negative keyword;positive
Я написал следующую грамматику:
grammar input;
input : clauses;
keyword : NOT? WORD;
clauses : keyword (SEPARATOR clauses)?;
fragment N : ('N'|'n') ;
fragment O : ('O'|'o') ;
fragment T : ('T'|'t') ;
fragment SPACE : ' ' ;
SEPARATOR : ';';
NOT : N O T SPACE;
WORD : ~[;]+;
Моя проблема в том, что в правиле keyword
, WORD
, кажется, имеет больший приоритетчем NOT
.Not something
распознается как слово Not something
вместо отрицательного something
.
Например, дерево разбора, которое я получаю, это
.
То, что я пытаюсь достичь, это что-то вроде этого
Как вы можете сделать выражение более приоритетным по сравнению с другим в ANTLR4?Любой совет по исправлению этого?
Обратите внимание, что хотя эта грамматика очень проста и ANTLR4 может показаться здесь ненужной, истинная грамматика, которую я хочу сделать, более сложна, и я просто упростил ее здесь, чтобы продемонстрировать свою проблему.
Спасибо за ваше время!