Отсутствует в этом фрагменте кода:
Как обрабатываются условия ошибки.
Какой тип токена возвращается анализатору и какпредставлен семантический тип.
Проверяет, заполнен ли внутренний буфер фиксированной длины.
Третий требует проверкипосле каждого присвоения через string_buffer_ptr
, что может привести к ошибочному состоянию, поэтому оно также возвращается к первому пункту выше.
По сути, это вещи, которые полностью зависят от вашего приложения.Как вы справляетесь с другими видами ошибок?Вы пытаетесь восстановить и продолжить анализ или вы просто пишете сообщение об ошибке и отказываетесь?Вам нужно будет заполнить обработку этих ошибок согласованно с другой обработкой ошибок.
Наиболее вероятный код для передачи результата будет выглядеть примерно так:
BEGIN(INITIAL);
*string_buf_ptr = '\0';
/* return string constant token type and
* value to parser
*/
yylval.str = strdup(string_buf);
return STRING_LITERAL;
Но, конечно, вы 'Вам нужно будет заменить str
на правильный тег для char*
в вашем семантическом объединении (если вы его используете) и заменить значение return
на правильное имя токена.И вы могли бы предпочесть использовать malloc
и strcpy
вместо strdup
, хотя есть много всего, что нужно просто убедиться, что у вас есть резервное определение strdup
на тот случай, если оно вам понадобится.