aboutsummaryrefslogtreecommitdiffstats
path: root/parser.h
diff options
context:
space:
mode:
authorGalin Simeonov <gts@volconst.com>2021-05-17 17:29:08 +0300
committerGalin Simeonov <gts@volconst.com>2021-07-15 18:00:15 +0300
commitf768d9bdb84e846d89aac66a4f3433a44241c298 (patch)
treeb7e8248bebd80c8b1f911f666260ad52b7213b84 /parser.h
parent679cbe58c4e53f0163588a7731154f3afe2d25aa (diff)
downloadMEGATRON-f768d9bdb84e846d89aac66a4f3433a44241c298.tar.gz
parser formed
Diffstat (limited to 'parser.h')
-rw-r--r--parser.h124
1 files changed, 124 insertions, 0 deletions
diff --git a/parser.h b/parser.h
new file mode 100644
index 0000000..ef82184
--- /dev/null
+++ b/parser.h
@@ -0,0 +1,124 @@
+#ifndef PARSER_H
+#define PARSER_H PARSER_H
+#include <program.h>
+#include <stddef.h>
+#include <assert.h>
+#include <map.h>
+
+enum AST_Type
+{
+ AST_TYPE_MACHINE,
+ AST_TYPE_STATE,
+ AST_TYPE_STATES,
+ AST_TYPE_EVENT,
+ AST_TYPE_EVENTS,
+ AST_TYPE_TRANSITION,
+ AST_TYPE_TRANSITIONS,
+ AST_TYPE_COMMAND,
+ AST_TYPE_PIPELINE,
+};
+struct AST
+{
+ enum AST_Type type;
+};
+struct AST_State
+{
+ enum AST_Type type;
+ struct token *id;
+};
+struct AST_Event
+{
+ enum AST_Type type;
+ struct token *id;
+};
+struct AST_States
+{
+ enum AST_Type type;
+ size_t number_of_states;
+ struct Map *states_map;
+ struct AST_State *states[];
+};
+struct AST_Events
+{
+ enum AST_Type type;
+ size_t number_of_events;
+ struct Map *events_map;
+ struct AST_Event *events[];
+};
+struct AST_Transition
+{
+ enum AST_Type type;
+ struct AST_State *from;
+ struct AST_State *to;
+ struct AST_Event *event;
+ struct AST_Pipeline *pipeline;
+};
+struct AST_Command
+{
+ enum AST_Type type;
+ struct token *function_name;
+ struct token *argument;
+};
+struct AST_Pipeline
+{
+ enum AST_Type type;
+ size_t size;
+ struct AST_Command *pipeline[];
+};
+struct AST_Machine
+{
+ enum AST_Type type;
+ struct token *id;
+ struct AST_States *states;
+ struct AST_Events *events;
+ struct AST_Transitions *transitions;
+};
+struct AST_Transitions
+{
+ enum AST_Type type;
+ size_t size;
+ struct AST_Transition *transitions[];
+};
+
+
+struct AST* parse_unit(struct Translation_Data *translation_data);
+struct AST_Machine* parse_machine(struct Translation_Data *translation_data);
+struct AST_Machine* parse_machine_inner(struct token *machine_id,struct Translation_Data *translation_data);
+struct AST_States* parse_states_inner(struct Translation_Data *translation_data);
+struct AST_State* parse_state(struct Translation_Data *translation_data);
+struct AST_Events* parse_events_inner(struct Translation_Data *translation_data);
+struct AST_Event* parse_event(struct Translation_Data *translation_data);
+struct AST_Transitions* parse_transitions_inner(struct Translation_Data *translation_data,struct AST_States *states,struct AST_Events *events );
+struct AST_Transition* parse_transition(struct Translation_Data *translation_data,struct AST_States *states,struct AST_Events *events);
+struct AST_Pipeline* parse_pipeline(struct Translation_Data *translation_data);
+struct AST_Command* parse_command(struct Translation_Data *translation_data);
+struct AST_State* parse_start_on(struct Translation_Data *translation_data,struct AST_States *states);
+
+
+struct AST_State* get_ast_state(struct token *id);
+struct AST_Event* get_ast_event(struct token *id);
+struct AST_States* get_ast_states(struct Queue *states);
+struct AST_Events* get_ast_events(struct Queue *events);
+struct AST_Transition* get_ast_transition(struct AST_State *from,struct AST_State *to,struct AST_Event *event,struct AST_Pipeline *pipeline);
+struct AST_Command* get_ast_command(struct token *function_name,struct token *argument);
+struct AST_Pipeline* get_ast_pipeline(struct Queue *pipeline);
+struct AST_Machine* get_ast_machine(struct token *id,struct AST_States *states,struct AST_Events *events,struct AST_Transitions *transitions,struct AST_State *starting_state);
+struct AST_Transitions* get_ast_transitions(struct Queue *transitions);
+
+
+void delete_ast(struct AST* ast);
+void delete_ast_event(struct AST_Event* ast);
+void delete_ast_states(struct AST_States* ast);
+void delete_ast_state(struct AST_State* ast);
+void delete_ast_events(struct AST_Events* ast);
+void delete_ast_transition(struct AST_Transition* ast);
+void delete_ast_command(struct AST_Command* ast);
+void delete_ast_pipeline(struct AST_Pipeline* ast);
+void delete_ast_machine(struct AST_Machine* ast);
+void delete_ast_transitions(struct AST_Transitions* ast);
+
+
+void pointer_array_fill(void **array,struct Queue *q);
+struct Queue* parse_list(struct AST *(*parser)(struct Translation_Data*),struct Translation_Data *translation_data,enum Keyword delim);
+
+#endif