我的语言语法。这是其中的一部分
myAlias: (project_id '.' )? t_name;
project_id: DIGIT ;
DIGIT : '0'..'9';
现在调试输入字符串的解析器
someText 1.myName
我可以看到解析器匹配' 1。'而不是' 1'正如我所期望的那样。这会导致代码中的解析错误。
我该如何避免这种行为?
由于
答案 0 :(得分:0)
这必须是因为词法分析器的默认贪婪。 有一些关于如何处理它的例子here。
如果我没有弄错的话,您可以使用fragment
让词法分析器与其自身不匹配。它看起来像这样:
fragment DIGIT = ('0'..'9')
fragment PROJECT_ID: DIGIT '.';
myAlias: PROJECT_ID? t_name;