Условия начала flex (соответствующие строковые литералы) - PullRequest
0 голосов
/ 31 января 2012

Я реализую условие запуска для соответствия строк в стиле C в руководстве flex .

Сегмент, который меня интересует:

     <str>\"        { /* saw closing quote - all done */
             BEGIN(INITIAL);
             *string_buf_ptr = '\0';
             /* return string constant token type and
              * value to parser
              */
             }

У меня нет проблем с возвратом типа токена, но я не уверен, как передать строковое значение в этой ситуации. Если я печатаю yytext при возвращении токена, он просто содержит «терминатор».

Итак, как мне получить значение строки?

Спасибо заранее; Я новичок, чтобы сгибать.

1 Ответ

0 голосов
/ 03 февраля 2012

Вы не вернете yytext, но вернете указатель на string_buf.

yytext содержит терминатор, поскольку это содержимое последнего регулярного выражения для сопоставленного состояния.Во всех других случаях (кроме терминатора) вашего примера содержимое yytext копируется в string_buf (например, проверьте строки с помощью *string_buf_ptr++=*yptr++;), так что буфер содержит окончательную строку.

...