【问题标题】:How to fix GCC type warning on variable returned by the parser generator?如何修复解析器生成器返回的变量的 GCC 类型警告?
【发布时间】:2020-09-13 17:48:23
【问题描述】:

我希望 Packcc 解析器生成器“$0s”或“$0e”变量在解析器操作中抛出一个 int,因为这些变量代表输入中的一个位置。

我做了一个最小的解析器,打印单词最后一个字符的位置。

word <- [a-z]+[\n]    {printf("Position %i\n", $0e);}

%%

int main()
{
    pcc_context_t *ctx = pcc_create(NULL);
    while(pcc_parse(ctx, NULL));
    pcc_destroy(ctx);
    return 0;
}

使用“packcc”命令生成解析器后,我编译 C 生成的文件,然后 Gcc 发送此警告。

warning: type defaults to 'int' in type name [-Wimplicit-int]

提前谢谢你。

【问题讨论】:

  • 警告在哪一行?您可能必须查看解析器输出才能了解发生了什么。
  • line 888:5 "#define _0e ((const)__pcc_in->data.leaf.capt0.range.end) printf("str %d\n", _0e); "
  • 当我使用来自 github 的最新版本的 packcc 构建你的解析器时,我没有收到这样的警告,对我来说,有问题的行有 const int 而不是 const。你用的是什么版本的 packcc?
  • 对我来说,那行也有printf("Position %i"...),匹配源代码,而不是"str %d"。您确定要构建您在此处发布的相同文件吗? (您在编辑器中保存了文件等?)
  • 对不起,我搞砸了我所做的许多测试。此处发布的文件是 888:5 "#define _0e ((const)__pcc_in->data.leaf.capt0.range.end) printf("Position %i\n", _0e);"

标签: c parsing peg packcc


【解决方案1】:

这看起来像是该版本的 packcc 解析器生成器中的一个错误。现在是 fixed 在 master 中,所以尝试升级。

或者您可以简单地忽略警告,因为类型确实应该是 int

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-04
    • 2010-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    相关资源
    最近更新 更多