Синтаксическая ошибка из правила по умолчанию "*"

При компиляции (обработка с использованием re2c) образца распознавания целых чисел: методом sentinel я получаю:

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;
}

Если я удаляю эту строку звездочкой, то ошибки не возникает, вывод генерируется, компилятор компилирует его, и программа работает (за исключением того, что я удалил примеры ошибок из тестов). Образец неправильный? Как я могу исправить это, чтобы работать как задумано?

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

Другие вопросы по тегам