Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么使用令牌规则(在ANTLR中)“;标识:字母(字母|数字)*&引用;不承认;“x y z”;?_Antlr_Whitespace_Grammar_Lexer - Fatal编程技术网

为什么使用令牌规则(在ANTLR中)“;标识:字母(字母|数字)*&引用;不承认;“x y z”;?

为什么使用令牌规则(在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”,所

假设我有一段ANTLR语法(lexer部分)

我在想,既然WS吃掉了标记之间的所有空白,那么“xyz”和“xyz”都应该被识别为同一个Ident标记。但显然只有“x y z”会被视为3个标识。所以我真的对lexer规则遇到空白时的行为感到困惑

更具体地说,我有一条规则

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