为什么使用令牌规则(在ANTLR中)“;标识:字母(字母|数字)*&引用;不承认;“x y z”;?
假设我有一段ANTLR语法(lexer部分) 我在想,既然WS吃掉了标记之间的所有空白,那么“xyz”和“xyz”都应该被识别为同一个Ident标记。但显然只有“x y z”会被视为3个标识。所以我真的对lexer规则遇到空白时的行为感到困惑 更具体地说,我有一条规则为什么使用令牌规则(在ANTLR中)“;标识:字母(字母|数字)*&引用;不承认;“x y z”;?,antlr,whitespace,grammar,lexer,Antlr,Whitespace,Grammar,Lexer,假设我有一段ANTLR语法(lexer部分) 我在想,既然WS吃掉了标记之间的所有空白,那么“xyz”和“xyz”都应该被识别为同一个Ident标记。但显然只有“x y z”会被视为3个标识。所以我真的对lexer规则遇到空白时的行为感到困惑 更具体地说,我有一条规则 VARIABLE: ('A'..'Z')+ DIGIT* ; VARIABLE: ('A'..'Z')+ DIGIT* ; 我想让它识别变量身份,比如X3、Y4、XX55等等。但令人惊讶的是,这个规则识别“XY”,所
VARIABLE: ('A'..'Z')+ DIGIT* ;
VARIABLE: ('A'..'Z')+ DIGIT* ;
我想让它识别变量身份,比如X3、Y4、XX55等等。但令人惊讶的是,这个规则识别“XY”,所以这似乎是完全不可理解的。你的想法是什么?标识:字母(字母|数字)*代码>表示标识是一个字母,后跟零个或多个字母或数字没有空白
这就是为什么“x y z”被识别为3个Ident尽管您将WS
放在隐藏的通道上,x y z
是三个Ident
标记,因为WS
标记只在解析器规则中被丢弃,而不是在lexer规则中
更具体地说,我有一条规则
VARIABLE: ('A'..'Z')+ DIGIT* ;
VARIABLE: ('A'..'Z')+ DIGIT* ;
我想让它识别变量身份,比如X3、Y4、XX55等等。但令人惊讶的是,这个规则识别“XY”,所以这似乎是完全不可理解的。你的想法是什么
不,规则变量
与“X Y”
不匹配(包括空格):您一定做错了什么。谢谢。但是你为什么说没有空格?我有一个WS-rule可以识别它。WS-rule匹配以下两个空格:(x
和y
)和(y
和z
)