Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.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
Java antLR解析器匹配的字符太多_Java_Antlr_Lexer - Fatal编程技术网

Java antLR解析器匹配的字符太多

Java antLR解析器匹配的字符太多,java,antlr,lexer,Java,Antlr,Lexer,我的语言有语法。这是它的一部分 myAlias: (project_id '.' )? t_name; project_id: DIGIT ; DIGIT : '0'..'9'; 现在在调试输入字符串的解析器时 someText 1.myName 我可以看到解析器匹配的是“1”,而不是我所期望的数字中的“1”。这将进一步导致代码中的解析错误 我怎样才能避免这种行为 谢谢这一定是因为lexer默认的贪婪。 这里有一些关于如何处理它的例子 如果我没有弄错的话,您可以使用片段使lexer本身

我的语言有语法。这是它的一部分

myAlias: (project_id '.' )? t_name;

project_id: DIGIT ;

DIGIT :  '0'..'9';
现在在调试输入字符串的解析器时

someText 1.myName
我可以看到解析器匹配的是“1”,而不是我所期望的数字中的“1”。这将进一步导致代码中的解析错误

我怎样才能避免这种行为


谢谢

这一定是因为lexer默认的贪婪。 这里有一些关于如何处理它的例子

如果我没有弄错的话,您可以使用
片段
使lexer本身不匹配它作为标记。它看起来像这样:

fragment DIGIT = ('0'..'9')
fragment PROJECT_ID: DIGIT '.';
myAlias: PROJECT_ID? t_name;