#ifndef FVM_AS_PARSER_H_ #define FVM_AS_PARSER_H_ #include "as_tokenizer.h" #include "utils.h" #include "as_op.h" struct arg { int64_t ival; double fval; }; typedef struct arg * Arg; struct instr { enum op op; Arg arg; const char* tagName; }; typedef struct instr *Instr; struct label { const char* name; }; typedef struct label *Label; struct stmt { Label label; Instr instr; }; typedef struct stmt *Stmt; struct stmts { Stmt* stmts; }; typedef struct stmts *Stmts; struct prog { Stmts stmts; }; typedef struct prog *Prog; Prog parseProg(Allocator alct, TokenStream ts); Stmt parseStmt(Allocator alct, TokenStream ts); Stmts parseStmts(Allocator alct, TokenStream ts); Instr parseInstr(Allocator alct, TokenStream ts); Label parseLabel(Allocator alct, TokenStream ts); enum op parseOp(Allocator alct, TokenStream ts); #endif