53 lines
880 B
C
53 lines
880 B
C
|
|
typedef struct Parser{
|
|
Token_Array array;
|
|
Arena *arena;
|
|
}Parser;
|
|
|
|
function Token *
|
|
token_get(Parser *p){
|
|
Token *result = p->array.iter_bucket->data + p->array.iter_len;
|
|
return result;
|
|
}
|
|
|
|
function Token *
|
|
token_next(Parser *p){
|
|
Token *result = token_array_iter_next(&p->array);
|
|
return result;
|
|
}
|
|
|
|
function Token *
|
|
token_match(Parser *p, Token_Kind kind){
|
|
Token *token = token_get(p);
|
|
if(token->kind == kind){
|
|
token = token_next(p);
|
|
return token;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/*
|
|
|
|
|
|
*/
|
|
|
|
function Expr *
|
|
parse_expr_atom(Parser *p){
|
|
Token *token = 0;
|
|
if((token = token_match(p, TK_StringLit))){
|
|
Expr *result = expr_str(p->arena, token);
|
|
return result;
|
|
}
|
|
else if((token = token_match(p, TK_Int))){
|
|
Expr *result = expr_int(p->arena, token);
|
|
return result;
|
|
}
|
|
|
|
invalid_codepath;
|
|
return 0;
|
|
}
|
|
|
|
function Expr *
|
|
parse_expr(Parser *p){
|
|
return 0;
|
|
} |