这是我在java.g4中看到的规则之一:
DecimalLiteral:('0'|'1'..'9''0'..'9'*)IntegerTypeSuffix? ;
为什么不这样写呢:
DecimalLiteral:('0'..'9'+)IntegerTypeSuffix? ;
有什么我想念的吗? 感谢您的反馈
此致 菲利普弗兰克森
答案 0 :(得分:4)
目的是让0
成为DecimalLiteral
,但以0
开头的所有其他整数都是OctalLiteral
。
我更喜欢使用这样的一对规则:
OctalLiteral : '0'+ [1-7] [0-7]* IntegerTypeSuffix?;
DecimalLiteral : [0-9]+ IntegerTypeSuffix?;
然后将无效八进制整数(这对规则仍将接受为DecimalLiteral
)的验证推迟到解析过程的后续步骤。