Antlr4 不识别标识符

Antlr4 doesn't recognize identifiers

我正在尝试创建一个逐行解析文件的语法。

grammar Comp;

options 
{
    language = Java;
}

@header {
    package analyseur;
    import java.util.*;
    import component.*;
}

@parser::members {
    /** Line to write in the new java file */
    public String line;
}

start   
        : objectRule        {System.out.println("OBJ");  line = $objectRule.text;}
        | anyString         {System.out.println("ANY");  line = $anyString.text;}
        ;

objectRule : ObjectKeyword ID ;

anyString : ANY_STRING ;


ObjectKeyword :  'Object' ;
ID  :   [a-zA-Z]+ ;
ANY_STRING :  (~'\n')+ ;
WhiteSpace : (' '|'\t') -> skip;

当我将词素 'Object o' 发送到语法时,输出是 ANY 而不是 OBJ。

'Object o'   =>  'ANY'   // I would like OBJ

我知道 ANY_STRING 更长,但我按顺序写了词法分析器标记。有什么问题吗?

非常感谢您的帮助! ;)

对于词法分析器规则,匹配最长的规则获胜,与规则顺序无关。如果匹配长度相同,则第一个列出的规则获胜。

要使规则顺序有意义,请将 ANY_STRING 规则的可能匹配长度减少到等于或小于任何关键字或 ID:

ANY_STRING: ~( ' ' | '\n' | '\t' ) ; // also?: '\r' | '\f' | '_' 

更新

要查看词法分析器实际在做什么,