假设我有一段ANTLR语法(词法分析器部分)
fragment LETTER : ('a'..'z' | 'A'..'Z') ;
fragment DIGIT : '0'..'9';
INTEGER : DIGIT+ ;
Ident : LETTER (LETTER | DIGIT)*;
WS : (' ' | '\t' | '\n' | '\r' | '\f')+ {$channel = HIDDEN;};
COMMENT : '//' .* ('\n'|'\r') {$channel = HIDDEN;};我在想,既然WS吃掉了token之间的所有空格,那么"x,y,z“和"xyz”应该被识别为相同的标识。但显然只有"x y z“会被认为是3个身份。因此,我真的对lexer规则遇到空白时的行为感到困惑。
更具体地说,我有一条规则
VARIABLE: ('A'..'Z')+ DIGIT* ;我希望它能够识别变量标识,如X3、Y4、XX55等。但令人惊讶的是,该规则识别“X、Y”,因此这似乎完全无法理解。你的想法是什么?
发布于 2011-11-15 04:46:45
尽管您已经将WS放在HIDDEN通道上,但"x y z"是三个Ident标记,因为WS标记只在解析器规则中被丢弃,而不是在词法分析器规则中。
更具体地说,我有一个规则
变量:('A'..'Z')+ DIGIT*;
我希望它能够识别变量标识,如X3、Y4、XX55等。但令人惊讶的是,该规则识别“X、Y”,因此这似乎完全无法理解。你的想法是什么?
不,规则VARIABLE与" X Y"不匹配(包括空格):您一定是做错了什么。
发布于 2011-11-15 04:39:34
Ident : LETTER (LETTER | DIGIT)*;指的是一个字母后面跟着零个或多个字母或数字。没有空格!
这就是为什么"x,y,z“被认为是3个同一性的原因。
https://stackoverflow.com/questions/8127576
复制相似问题