Синтаксическая ошибка 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*;
так как вы удаляете пробелы уже с опцией пропуска.