ANTLR4 CPP14语法无法识别十进制数字

问题描述

我正在使用下面的ANTLR语法来解析我的代码

https://github.com/antlr/grammars-v4/tree/master/cpp

以下代码在解析时给出错误。这里的“ 08”不是标识为整数文字

TEST_F(suite_name_test_p,08)
{
   //...
}

我进行了以下更改以解决错误

 Decimalliteral
  //: NONZERODIGIT ('\''? DIGIT)*  //old 
    : NONZERODIGIT* ('\''? DIGIT)+  // changed to     
 ;

但是随着这些更改,八进制数被标识为整数文字。建议进行其他更改吗?

解决方法

以0开头的整数以八进制为基数8,因此仅允许使用数字0-7,每个数字代表3位。

因此,在您的情况下,08包含一个非法数字8。


您似乎已经意识到这一点,但是可能希望从不符合C ++的语法中完全删除八进制数字:

我没有阅读语法,但是在某个地方必须使用IntegerLiteral和“ OctalLiteral”替代。必须删除八进制替代项,以从语言中完全删除八进制数字。