Java 如何在Antlr4中创建能够捕获不同类型词汇错误的词汇分析器

Java 如何在Antlr4中创建能够捕获不同类型词汇错误的词汇分析器,java,compiler-construction,antlr,antlr4,lexical-analysis,Java,Compiler Construction,Antlr,Antlr4,Lexical Analysis,我正在使用Antlr4创建我的词法分析器,但我不知道如何创建一个捕捉不同类型词法错误的词法分析器 例如: 如果我有一个无法识别的符号,如^,词法分析器应该报告一个错误,如“无法识别的符号”^” 如果我有一个无效的标识符,如2n,词法分析器应该报告这样的错误“标识符”2n“必须以字母开头” 请帮助我。为每个已知错误创建一个错误标记规则,并在末尾创建一个“catchall”错误标记规则,如下所示: // valid tokens first! Number : [0-9]+; Identifier

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

例如:

  • 如果我有一个无法识别的符号,如
    ^
    ,词法分析器应该报告一个错误,如“无法识别的符号”^”

  • 如果我有一个无效的标识符,如
    2n
    ,词法分析器应该报告这样的错误“标识符”2n“必须以字母开头”


  • 请帮助我。

    为每个已知错误创建一个错误标记规则,并在末尾创建一个“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...
    

    ANTLR文档讨论了如何处理错误。您能否为解析树侦听器提供示例代码、正在处理的语法和一些示例输入?lexer如何知道
    2n
    甚至应该是一个标识符?相关: