编译时(使用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;
}
如果我用星号删除该行,则没有错误,输出生成,编译器编译它并且程序正常工作(除了我从测试中删除了错误样本)。样品是错的吗?如何修复它以按预期工作?
答案 0 :(得分:3)
你有什么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