#ifndef LANG_H #define LANG_H #include #include "libgfs2.h" struct lgfs2_lang_state { int ls_colnum; int ls_linenum; int ls_errnum; struct ast_node *ls_ast_root; struct ast_node *ls_ast_tail; struct ast_node *ls_interp_curr; }; typedef enum { AST_NONE, // Statements AST_ST_SET, AST_ST_GET, _AST_EX_START, // Expressions AST_EX_ID, AST_EX_NUMBER, AST_EX_STRING, AST_EX_ADDRESS, AST_EX_PATH, AST_EX_SUBSCRIPT, AST_EX_OFFSET, AST_EX_BLOCKSPEC, AST_EX_STRUCTSPEC, AST_EX_FIELDSPEC, AST_EX_TYPESPEC, // Keywords AST_KW_STATE, } ast_node_t; enum { AST_INTERP_SUCCESS = 0, // Success AST_INTERP_FAIL = 1, // Failure AST_INTERP_INVAL = 2, // Invalid field/type mismatch AST_INTERP_ERR = 3, // Something went wrong, see errno }; extern const char* ast_type_string[]; struct ast_node { ast_node_t ast_type; struct ast_node *ast_left; struct ast_node *ast_right; char *ast_text; char *ast_str; uint64_t ast_num; }; extern struct ast_node *ast_new(ast_node_t type, const char *text); extern void ast_destroy(struct ast_node **val); #define YYSTYPE struct ast_node * #endif /* LANG_H */