Где синтаксическая ошибка в этом (f) фрагменте lex? - PullRequest
0 голосов
/ 18 января 2010

Я прекрасно провожу время, используя лексер с помощью flex. Проблема в том, что мой редактор кода не окрашивает синтаксис файла, и кажется, что в моем правиле есть ошибка. Поскольку я не слишком уверен в том, как использовать одинарные и двойные кавычки внутри интервалов, я решил поделиться этим фрагментом с вами:

[^\\\'\n]+
{
    wchar_t* string;
    utf8_decode(yytext, &string);
    yyextra->append(string);
    free(string);
}

Flex сообщает, что в строке utf8_decode есть «нераспознанное правило». Если я уберу правило целиком, все снова будет хорошо.

Может кто-нибудь сказать, что я здесь делаю не так?

1 Ответ

2 голосов
/ 18 января 2010

Действие должно начинаться с той же строки, что и шаблон.Так что используйте

[^\\\'\n]+ {
    wchar_t* string;
    utf8_decode(yytext, &string);
    yyextra->append(string);
    free(string);
}
...