我是 Antlr 的新手。我写了一点语法来练习,但被 API CommonTokenStream 搞糊涂了
lexer grammar Expr;
options {
language = Java;
}
EXPRS:EXPRT {System.out.println($EXPRT.text);};
fragment
EXPRT : 'xxx' ID {System.out.println($ID.text);} ' zzz';
fragment
ID : ('a'..'z' |'A'..'Z' |'_' )('a'..'z' |'A'..'Z'|'_')*;
测试代码是这样的:
ANTLRStringStream input = new ANTLRStringStream(msg);
Expr expr = new Expr(input);
CommonTokenStream cs = new CommonTokenStream(expr);
System.out.println(cs.size());
无论输入是什么,CommonTokenStream 都没有令牌。但是,当我直接使用 expr 时,它会输出。有谁知道为什么?antlr的版本是3.5