我的語法中的一些關鍵字(字符串常量)包含大寫字母 在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