我的语法中的一些关键字(字符串常量)包含大写字母 在ANTLR语法中使用不同的关键字关键字
PREV_VALUE : 'PreviousValue';
这会导致奇怪的解析行为:含有相同的大写字母(“P”,“V”)被解析不正确其他标记。
这里的词法语法的简化版本:
lexer grammar ExpressionLexer;
COMMA : ',';
LPAREN : '(';
RPAREN : ')';
LBRACK : '[';
RBRACK : ']';
PLUS : '+';
MINUS : '-';
MULT : '*';
DIV : '/';
PREV_VALUE : 'PreviousValue';
fragment DIGIT : ('0'..'9');
fragment LETTER : ('a'..'z'|'A'..'Z'|'_');
fragment TAB : ('\t') ;
fragment NEWLINE : ('\r'|'\n') ;
fragment SPACE : (' ') ;
当我试图解析这种表达:
var expression = "P"; //Capital 'P' which included to the keyword 'PreviousValue'
var stringReader = new StringReader(expression);
var input = new ANTLRReaderStream(stringReader);
var expressionLexer = new ExpressionLexer(input);
var tokens = new CommonTokenStream(expressionLexer);
tokens._tokens
集合包含一个价值
[0] = {[@0,1:1='<EOF>',<-1>,1:1]}
这是不正确。
如果我改变expression
到 'P'(小写字母) tokens._tokens
集合包含两个值
[0] = {[@0,0:0='p',<0>,1:0]}
[1] = {[@1,1:1='<EOF>',<-1>,1:1]}
这是正确的。
当字符串PREV_VALUE : 'PreviousValue';
从语法中删除时,两个表达式都被正确解析。
是否可以在关键字中使用不同的大小写? 在ANTLR语法中有没有使用这样的关键字的例子?
对不起,我编辑了我的初始文章。希望清除它。 – 2012-01-13 22:24:02