#ifndef _LEX_H_ #define _LEX_H_ #include #include #include #include enum lexer_state_type { STATE_NORMAL, STATE_STRING, STATE_DSTRING, }; struct lexer_state { enum lexer_state_type s_type; b_queue_entry s_entry; }; struct ivy_asm_lexer_symbol_node { char s_char; enum ivy_symbol s_id; b_queue_entry s_entry; b_queue s_children; }; struct lex_token_def { int id; const char *name; uint64_t name_hash; }; struct ivy_asm_lexer { struct ivy_asm_lexer_symbol_node *lex_sym_tree; struct ivy_line_source *lex_source; b_dict *lex_keywords; enum ivy_status lex_status; struct ivy_asm_token *lex_queue; enum ivy_asm_token_type lex_prev_token; b_string *lex_temp; b_queue lex_state; unsigned int lex_brace_depth; char *lex_linebuf; size_t lex_linebuf_len; size_t lex_linebuf_cap; size_t lex_linebuf_ptr; }; #endif