static void parse_string(struct context_t *ctx, struct lexem_t *lexem) { locate_lexem(lexem, ctx); /* skip " */ advance(ctx, 1); /* compute length */ struct context_t cpy_ctx = *ctx; int length = 0; __parse_string(&cpy_ctx, (void *)&length, __parse_string_count); /* parse again */ lexem->type = LEX_STRING; lexem->str = xmalloc(length + 1); lexem->str[length] = 0; char *pstr = lexem->str; __parse_string(ctx, (void *)&pstr, __parse_string_emit); }
void* __parse_file(const char* path, GError** err, parser parser_cb, parser_alloc parser_alloc_cb, parser_free parser_free_cb, lexer lexer_cb) { char* buffer; if (!g_file_get_contents(path, &buffer, NULL, err)) return NULL; return __parse_string(buffer, err, parser_cb, parser_alloc_cb, parser_free_cb, lexer_cb); }
void DeviceCreationParameterString::SetValue(String val) throw (Exception) { if (Fix()) throw Exception("Device parameter is read only"); SetValueAsString(__parse_string(val)); }
DeviceCreationParameterString::DeviceCreationParameterString(String sVal) : DeviceCreationParameter() { this->sVal = __parse_string(sVal); }
static int __parse_primary (struct expr_parser *self, z_expr_t *expr) { const z_lexer_token_t *token = z_lexer_peek(self->lex); int negate = 0; switch (token->type) { case Z_LEXER_TOKEN_INT: __parse_int(self, expr); z_lexer_next(self->lex); break; case Z_LEXER_TOKEN_FLOAT: __parse_float(self, expr); z_lexer_next(self->lex); break; case Z_LEXER_TOKEN_BOOLEAN: expr->type = Z_EXPR_TYPE_INT; expr->d.integer = (token->length == 4); z_lexer_next(self->lex); break; case Z_LEXER_TOKEN_STRING: __parse_string(self, expr); z_lexer_next(self->lex); break; case Z_LEXER_TOKEN_IDENTIFIER: __parse_identifier(self, expr); z_lexer_next(self->lex); if (self->lex->query[token->start] == '(') { __parse_function(self, expr); } break; case Z_LEXER_TOKEN_OPERATOR: if (self->lex->query[token->start] == '(') { z_lexer_next(self->lex); __parse_predicate(self, expr); token = z_lexer_peek(self->lex); if (self->lex->query[token->start] != ')') { return(Z_EXPR_EXPECTED_END_PARENTHESIS); } z_lexer_next(self->lex); } else { return(Z_EXPR_PRIMARY_EXPECTED_PARENTHESIS); } break; default: return(Z_EXPR_UNKNOWN_PRIMARY_TOKEN); } if (expr == NULL) { return(Z_EXPR_NO_PRIMARY); } token = z_lexer_peek(self->lex); if (token->length == 3 && z_memeq(self->lex->query + token->start, "NOT", 3)) { z_lexer_next(self->lex); negate = 1; token = z_lexer_peek(self->lex); } if (token->length == 2 && z_memeq(self->lex->query + token->start, "IN", 2)) { z_lexer_next(self->lex); return(__parse_in(self, expr, negate)); } else if (token->length == 7 && z_memeq(self->lex->query + token->start, "BETWEEN", 7)) { z_lexer_next(self->lex); return(__parse_between(self, expr, negate)); } else if (negate) { return(Z_EXPR_PRIMARY_NOT_WITHOUT_OP); } return(Z_EXPR_OK); }