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

ANTLR4 CPP14 Grammar not able to identify decimal numbers

我正在使用下面的 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。


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

我没读过语法,但一定有 IntegerLiteral 和“OctalLiteral”的替代方法。必须删除八进制替代项才能从语言中完全删除八进制数字。