Lines Matching full:lexer
2 * JSON lexer
19 #include "qapi/qmp/json-lexer.h"
271 void json_lexer_init(JSONLexer *lexer, JSONLexerEmitter func)
273 lexer->emit = func;
274 lexer->state = IN_START;
275 lexer->token = qstring_new();
276 lexer->x = lexer->y = 0;
279 static int json_lexer_feed_char(JSONLexer *lexer, char ch, bool flush)
283 lexer->x++;
285 lexer->x = 0;
286 lexer->y++;
290 new_state = json_lexer[lexer->state][(uint8_t)ch];
291 char_consumed = !TERMINAL_NEEDED_LOOKAHEAD(lexer->state, new_state);
293 qstring_append_chr(lexer->token, ch);
303 lexer->emit(lexer, lexer->token, new_state, lexer->x, lexer->y);
306 QDECREF(lexer->token);
307 lexer->token = qstring_new();
324 lexer->emit(lexer, lexer->token, JSON_ERROR, lexer->x, lexer->y);
325 QDECREF(lexer->token);
326 lexer->token = qstring_new();
328 lexer->state = new_state;
333 lexer->state = new_state;
339 if (lexer->token->length > MAX_TOKEN_SIZE) {
340 lexer->emit(lexer, lexer->token, lexer->state, lexer->x, lexer->y);
341 QDECREF(lexer->token);
342 lexer->token = qstring_new();
343 lexer->state = IN_START;
349 int json_lexer_feed(JSONLexer *lexer, const char *buffer, size_t size)
356 err = json_lexer_feed_char(lexer, buffer[i], false);
365 int json_lexer_flush(JSONLexer *lexer)
367 return lexer->state == IN_START ? 0 : json_lexer_feed_char(lexer, 0, true);
370 void json_lexer_destroy(JSONLexer *lexer)
372 QDECREF(lexer->token);