ANTLR 4 java.g4 - >奇怪的语法规则

时间:2013-03-20 17:44:46

标签: grammar lexer antlr4

这是我在java.g4中看到的规则之一:

DecimalLiteral:('0'|'1'..'9''0'..'9'*)IntegerTypeSuffix? ;

为什么不这样写呢:

DecimalLiteral:('0'..'9'+)IntegerTypeSuffix? ;

有什么我想念的吗? 感谢您的反馈

此致 菲利普弗兰克森

1 个答案:

答案 0 :(得分:4)

目的是让0成为DecimalLiteral,但以0开头的所有其他整数都是OctalLiteral

我更喜欢使用这样的一对规则:

OctalLiteral : '0'+ [1-7] [0-7]* IntegerTypeSuffix?;
DecimalLiteral : [0-9]+ IntegerTypeSuffix?;

然后将无效八进制整数(这对规则仍将接受为DecimalLiteral)的验证推迟到解析过程的后续步骤。