static int expect(ApexParser *parser, ApexToken exp) { ApexToken tk = GET_TOKEN(parser); if (tk == exp) { parser->value = apex_lexer_get_value(parser->lexer); NEXT_TOKEN(parser); return 1; } unexp(parser, 1, exp); return 0; }
/* pri_expr * : ID * | INT * | FLT * | STR * | '(' expr ')' */ static void pri_expr(ApexParser *parser) { if (accept(parser, APEX_TOKEN_ID)) { char *id = GET_STR(parser); apex_ast_id(parser->ast, id); } else if (accept(parser, APEX_TOKEN_INT)) { int value = GET_INT(parser); apex_ast_int(parser->ast, value); } else if (accept(parser, APEX_TOKEN_FLT)) { float value = GET_FLT(parser); } else if (accept(parser, APEX_TOKEN_STR)) { char *str = GET_STR(parser); apex_ast_str(parser->ast, str); } else if (accept(parser, '(')) { expr(parser); expect(parser, ')'); } else { unexp(parser, 0); } }
/* <op> . <!op> */ void o_not (void) { unexp (OP_NOT); }