问题描述
我正在使用下面的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”替代。必须删除八进制替代项,以从语言中完全删除八进制数字。