2016-09-28 2 views
1

При компиляции (обработки с использованием 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

Почему я получаю вниз голос? Я не могу улучшить будущие вопросы, если не знаю, что не так. – user34660

+0

При публикации ошибок вы всегда должны предоставлять информацию (платформа, версия программы, способ вызова программы, точное сообщение об ошибке и т. Д.). Таким образом, у людей есть шанс помочь. Обратите внимание, что это не я, который был ниспослан. – skvadrik

+0

Спасибо, @skvadrik. Я верю тебе, что это не ты. Ваше объяснение помогает. Я хочу сказать, что я подозреваю, что кто-то голосует все, что я делаю, потому что это я. Я не могу быть уверен, что это происходит. – user34660

ответ

2

Какая у вас версия 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

Да, это было так, за исключением того, что я не могу найти встроенную версию любой версии за 0.13.5. Я использовал exe-файл, который предназначен для создания PHP. Я думаю, что они должны добавить примечание на страницу образцов re2c, в которой требуется образец 0.13.7 или выше. Я использовал «[*]» и работает со старой версией. – user34660

+1

Если вы работаете в Windows, лучший способ создать re2c - использовать Cygwin или Mingw: http://re2c.org/install/install.html#windowshttp://re2c.org/install/install.html#windows , В настоящее время сборки MSVC не поддерживаются. – skvadrik