ANTLR4中的令牌处理不一致

ANTLR4中的令牌处理不一致,antlr4,Antlr4,ANTLR4书引用了一个多模式示例 与 有没有我不见的安特福?这是在使用antlr4 maven插件 wiki提到了一些类似的内容,但我的阅读方式与github上的示例和使用时的轶事经历相矛盾,出现了以下情况之一: 您忘记在ModeTagsLexer.g4中更新OPEN规则以使用以下表单: OPEN : '«' -> mode(ISLAND) ; 您在Antlr4中发现了一个bug,应该向管理员报告 您是否指定了ANTLR在读取语法时应该使用的文件编码?欧洲字符少于255应该没问题

ANTLR4书引用了一个多模式示例

有没有我不见的安特福?这是在使用antlr4 maven插件


wiki提到了一些类似的内容,但我的阅读方式与github上的示例和使用
时的轶事经历相矛盾,出现了以下情况之一:

  • 您忘记在ModeTagsLexer.g4中更新
    OPEN
    规则以使用以下表单:

    OPEN  : '«' -> mode(ISLAND) ;
    
  • 您在Antlr4中发现了一个bug,应该向管理员报告


  • 您是否指定了ANTLR在读取语法时应该使用的文件编码?欧洲字符少于255应该没问题,但是…

    我当然更新了开放规则,上面的第二个片段是剪切/粘贴。我要试着做一个票证的测试。ThanksIt看起来像是antlr4 maven插件和/或m2e的问题。除此之外,我真的没法找到它。你比我更了解这一点,你可能会有更好的运气,看看示例项目FWIW,我为此创建了一个票证,最终我看到你发现并解决了这个问题[.谢谢:)除了将源/资源指定为UTF-8之外,我还能在哪里执行此操作?请参阅示例github repo,其中中断是可重复的,不确定maven,但在命令行上键入“antlr4”表示:-编码uuuuuu_uu指定语法文件编码;例如,euc jp
    parser grammar ModeTagsParser;
    
    options { tokenVocab=ModeTagsLexer; } // use tokens from ModeTagsLexer.g4
    
    file: (tag | TEXT)* ;
    
    tag : '<' ID '>'
        | '<' '/' ID '>'
        ;
    
    tag : '«' ID '>';
    
    OPEN    : '«'   -> pushMode(ISLAND);
    TEXT    : ~'«'+;
    
    OPEN  : '«' -> mode(ISLAND) ;