В настоящее время я работаю над проектом, и у меня есть задача проверить идентификатор с помощью грамматики ANTLR4.Эта часть проекта, если внешний интерфейс использует Angular 6, и грамматика также будет скомпилирована в бэкэнд-микросервис.
Проверка состоит в проверке строки, начинающейся с символа буквы | цифры, и затем она можетиметь букву | цифру | подчеркивание и заканчивается буквой | цифрой.
В настоящее время у меня проблемы с реализацией грамматики (поскольку у меня нет опыта работы с Lex) и обработкой ошибок.Вот моя грамматика и реализация для ошибки.
grammar test;
goal: identifier;
identifier: Alphanum+ Alphanumsymb* Alphanum+;
Alphanum: [a-zA-Z0-9];
Alphanumsymb: [a-zA-Z0-9_];
И моя реализация для определения допустимости строки в соответствии с грамматикой.
const teststring = "2019_Test_Identifier";
const inputStream = new ANTLRInputStream(teststring);
const lex = new lexer.TestGrammarLexer(inputStream);
const tokenStream = new CommonTokenStream(lex);
const pars = new parser.TestGrammarParser(tokenStream);
pars.goal();
console.log(pars.numberOfSyntaxErrors);
if ( pars.numberOfSyntaxErrors > 0 ) {
return false;
}
return true;
Моя проблема в том, что даже еслиЯ правильно понял грамматику, моя реализация обработки ошибок не правильная, и я не нашел материала для изучения обработки ошибок с помощью antlr4ts.
Так что, если вы можете мне помочь, я был бы признателен за отзыв ограмматика (как это должно быть, или проблемы, которые у него есть), а также о реализации обработки ошибок (некоторая информация об этом, потому что при тестировании я вижу, как ConsoleErrorListener выдает синтаксическую ошибку на консоль, но моя функция показывает 0 синтаксических ошибок).
Спасибо за чтение и надеюсь, что вы можете мне помочь.