Antlr4不识别标识符

时间:2015-07-14 16:20:04

标签: java token grammar antlr4 rule

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

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;

当我发送lexem' Object o'对于语法,输出是ANY而不是OBJ。

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

我知道ANY_STRING更长,但我按顺序写了lexer令牌。有什么问题?

非常感谢你的帮助! ;)

1 个答案:

答案 0 :(得分:1)

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

要使规则顺序有意义,请将 Total/Average NaN NaN $NaN NaN% $NaN $NaN 规则的可能匹配长度减少为与任何关键字或ID相同或更小:

ANY_STRING

<强>更新

要了解词法分子实际在做什么,dump the token stream