如何在 ANTLR 4 中创建可以捕获不同类型词法错误的词法分析器

How to create a lexical analyzer in ANTLR 4 that can catch different types of lexical errors

我正在使用 ANTLR 4 创建我的词法分析器,但我不知道如何创建一个词法分析器来捕获不同类型的词法错误。

例如:

  1. 如果我有一个无法识别的符号,如 ^,词法分析器应该报告这样的错误 "Unrecognized symbol "^" "

  2. 如果我有像 2n 这样的无效标识符,词法分析器应该报告这样的错误 "identifier "2n" must begin with a letter"

请你帮帮我。

为每个已知错误创建一个错误标记规则,并在末尾创建一个 "catchall" 错误标记规则,如下所示:

// valid tokens first!
Number : [0-9]+;
Identifier : [a-zA-Z] [a-zA-Z0-9]*;
//...

// "error" tokens
// don't use these tokens in your grammar; They will show up as extraneous tokens during parsing and can be handled if desired.
InvalidIdentifier : [0-9]([0-9a-zA-Z])+; 
ACommonInvalidToken : '^'; // if you want to be more specific for certain cases
// add more to address common mistakes

UnknownToken : . ; // the "catch-all" error token; be sure not to be too greedy...