Короче говоря, я хочу, чтобы мой язык принимал inpyut, который имеет такую форму: "1min" или "15min" или "1day".Я пытаюсь сделать так, чтобы синтаксический анализатор мог напрямую возвращать значение time_t
следующим образом (в моем файле Parser.yxx
:
timeframe:
INTEGER min
{ $$ = ($1 * 60); }
;
где %type <time_t> timeframe
. Для примера я толькопоказать с "min".
Имеющийся параметр min
: %token <std::string> min
и определен в моем файле сканера как токен "STRING":
"min" STRING_TOKEN(min)
, где STRING_TOKEN
макрос заканчивается так: std::string(yytext, yyleng)
.
Выше не работает, если я введу «1мин», как на входе, я всегда получаю:
Ошибка: синтаксическая ошибканеожиданная STRING, ожидая INTEGER на уровне 1.66-69
Конечно, я здесь что-то не так делаю, но кажется логичным, что я смогу сделать это с Flex / Bison?
Заранее всем спасибо!