Antlr4无法识别标识符

Antlr4无法识别标识符

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

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' | '_'


更新资料

要查看词法分析器的实际操作,请dump the token stream

关于java - Antlr4无法识别标识符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31412106/

10-10 19:28