当编译(使用re2c处理)示例Recognizing integers: the sentinel method时,我得到:

re2c : error : line 16, column 9: syntax error

似乎在抱怨“*”。以下是我的01_recognizing_integers.re文件(除非在第16行没有注释):
#include <stdio.h>

static const char *lex(const char *YYCURSOR)
{
    const char *YYMARKER;
    /*!re2c
        re2c:define:YYCTYPE = char;
        re2c:yyfill:enable = 0;

        end = "\x00";
        bin = '0b' [01]+;
        oct = "0" [0-7]*;
        dec = [1-9][0-9]*;
        hex = '0x' [0-9a-fA-F]+;

        *       { return "err"; }       // line 16
        bin end { return "bin"; }
        oct end { return "oct"; }
        dec end { return "dec"; }
        hex end { return "hex"; }
    */
}

int main(int argc, char **argv)
{
    for (int i = 1; i < argc; ++i) {
        printf ("%s: %s\n", lex(argv[i]), argv[i]);
    }
    return 0;
}

如果我用星号删除该行,则没有错误,将生成输出,编译器将对其进行编译,程序可以正常工作(除非我从测试中删除了错误样本)。 sample 有误吗?我如何将其修复为预期的功能?

最佳答案

您有什么re2c版本?

您需要re2c-0.13.7或更高版本(re2c-0.13.7.5是0.13.x系列中的稳定版本)。

re2c-0.16是最新的稳定版本。

对于较早的re2c版本,请使用[^]而不是*并阅读以下内容:http://re2c.org/manual/warnings/undefined_control_flow/wundefined_control_flow.html#difference-between-and

关于c++ - 默认规则 “*”的语法错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39738102/

10-11 04:54