antLR解析器匹配太多字符

时间:2016-02-15 07:41:51

标签: java antlr lexer

我的语言语法。这是其中的一部分

myAlias: (project_id '.' )? t_name;

project_id: DIGIT ;

DIGIT :  '0'..'9';

现在调试输入字符串的解析器

someText 1.myName

我可以看到解析器匹配' 1。'而不是' 1'正如我所期望的那样。这会导致代码中的解析错误。

我该如何避免这种行为?

由于

1 个答案:

答案 0 :(得分:0)

这必须是因为词法分析器的默认贪婪。 有一些关于如何处理它的例子here

如果我没有弄错的话,您可以使用fragment让词法分析器与其自身不匹配。它看起来像这样:

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