lang: ast: re-factor parser into multiple files
This commit is contained in:
37
lang/ast/ctx.h
Normal file
37
lang/ast/ctx.h
Normal file
@@ -0,0 +1,37 @@
|
||||
#ifndef _AST_CTX_H_
|
||||
#define _AST_CTX_H_
|
||||
|
||||
#include <blue/core/queue.h>
|
||||
#include <ivy/lang/ast.h>
|
||||
#include <ivy/status.h>
|
||||
|
||||
#define parser_push_state(parser, node_id, node_type, state_type) \
|
||||
((state_type *)parser_push_state_generic( \
|
||||
parser, node_id, sizeof(node_type), sizeof(state_type)))
|
||||
#define parser_get_state(parser, state_type) \
|
||||
((state_type *)parser_get_state_generic(parser))
|
||||
|
||||
struct parser_state {
|
||||
b_queue_entry s_entry;
|
||||
struct ivy_ast_node *s_parent;
|
||||
struct ivy_ast_node *s_node;
|
||||
};
|
||||
|
||||
struct ivy_parser {
|
||||
enum ivy_status p_status;
|
||||
b_queue p_state;
|
||||
b_queue p_token_queue;
|
||||
b_queue p_node_queue;
|
||||
};
|
||||
|
||||
enum pop_state_flags {
|
||||
STATE_ADD_NODE_TO_PARENT = 0x01u,
|
||||
};
|
||||
|
||||
extern struct parser_state *parser_push_state_generic(
|
||||
struct ivy_parser *parser, enum ivy_ast_node_type node_type,
|
||||
size_t node_size, size_t state_size);
|
||||
extern void parser_pop_state(struct ivy_parser *parser, enum pop_state_flags flags);
|
||||
extern struct parser_state *parser_get_state_generic(struct ivy_parser *parser);
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user