Синтаксическая ошибка Antlr: несоответствующий ввод 'p', ожидающий WS

У меня есть следующая грамматика:

grammar myProject;

program: WS EOF myRules;
WS: [ \t\r\n]+ -> skip;
myRules: myRule+;
myRule: SELECTOR OPEN declarations CLOSE;
declarations: declaration+;
declaration: PROPERTY EQ value ENDSYMBOL;
value: INT | STRING | COLOR;

SELECTOR : (('#'CHAR+)|('.'CHAR+)|CHAR+);
PROPERTY : [A-z-]+;

STRING : '"' .*? '"';
INT : [0-9]+ ;
COLOR : '#' [0-9a-fA-F] [0-9a-fA-F] [0-9a-fA-F] [0-9a-fA-F] [0-9a-fA-F] [0-9a-fA-F];
CHAR: [A-z];

EQ : ':' ;
OPEN : '{';
CLOSE : '}';
ENDSYMBOL : ';' ;

Теперь мой вклад заключается в следующем:

p {
    color: #054593;
    width: 100px;
}

Теперь, когда я анализирую это, я получаю следующую ошибку:

Синтаксическая ошибка: несоответствующий ввод 'p', ожидающий WS

У меня есть много вопросов здесь в стеке и я уже много гуглил, но я не могу найти ответ. Что я делаю неправильно в моей грамматике? Зачем программе нужен WS и как мне это исправить. Большое, большое спасибо заранее!

1 ответ

Решение

Самое первое, что вы делаете в своей грамматике - это требование WS:

program: WS EOF myRules;

Таким образом, при отсутствии каких-либо пробельных символов ваш анализ не выполняется. Я бы просто предложил:

program: myRule*;

так как вы удаляете пробелы уже с опцией пропуска.

Другие вопросы по тегам