【问题标题】:Syntax error from default rule "*"默认规则“*”的语法错误
【发布时间】:2016-09-28 04:32:46
【问题描述】:

在编译(使用 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;
}

如果我删除带有星号的那一行,那么就没有错误,生成输出并且编译器编译它并且程序可以工作(除了我从测试中删除了错误样本)。样本错了吗?如何修复它以使其按预期工作?

【问题讨论】:

  • 我为什么投了反对票?如果我不知道哪里出了问题,我就无法改进未来的问题。
  • 发布错误时,您应始终提供详细信息(平台、程序版本、程序如何被调用、确切的错误消息等)。这样人们就有机会提供帮助。请注意,投反对票的不是我。
  • 谢谢你,@skvadrik。我相信你不是你。你的解释有帮助。我想说我怀疑有人对我所做的一切投反对票只是因为那是我。我不确定这是否正在发生。

标签: c++ syntax-error re2c


【解决方案1】:

你有什么 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

【讨论】:

  • 是的,就是这样,除了我找不到任何超过 0.13.5 的版本的构建版本。我使用的是为构建 PHP 提供的 exe 文件。我认为他们应该在 re2c 示例页面上添加一条注释,说明该示例需要 0.13.7 或更高版本。我使用了“[*]”,它适用于旧版本。
  • 如果您在 Windows 上,构建 re2c 的最佳方法是使用 Cygwin 或 Mingw:re2c.org/install/install.html#windowshttp://re2c.org/install/…。目前不支持 MSVC 构建。
猜你喜欢
  • 2017-05-19
  • 2017-04-11
  • 1970-01-01
  • 1970-01-01
  • 2016-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多