如何使用具有相同开头的词法分析器规则?
我正在尝试使用两个类似的词法分析器规则(具有相同的开头):
TIMECONSTANT: ('0'..'9')+ ':' ('0'..'9')+;
INTEGER : ('0'..'9')+;
COLON : ':';
这是我的示例语法:
grammar TestTime;
text : (timeexpr | caseblock)*;
timeexpr : TIME;
caseblock : INT COLON ID;
TIME : ('0'..'9')+ ':' ('0'..'9')+;
INT : ('0'..'9')+;
COLON : ':';
ID : ('a'..'z')+;
WS : (' ' | '\t' | '\r' | '\n') {$channel=HIDDEN;};
当我尝试解析文本时:
12:44
123 : abc
123: abc
前两行正确解析,第三行 - 生成错误。出于某种原因,'123:' ANTLR 解析为 TIME(虽然不是)...
那么,有没有可能用这样的词法来制作语法呢?
在我的语言中,有这样的规则对于使用 case-blocks 和 datetime 常量是必要的。例如,用我的语言可以写成:
case MyInt of
1: a := 01.01.2012;
2: b := 12:44;
3: ....
end;