From dd5586abec207dd4acd16d51ce0d392c03e5e957 Mon Sep 17 00:00:00 2001 From: nasr Date: Thu, 26 Mar 2026 22:35:30 +0100 Subject: feature(main): init feature(main): init --- source/fajr_parser/fajr_parser.h | 60 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 source/fajr_parser/fajr_parser.h (limited to 'source/fajr_parser/fajr_parser.h') diff --git a/source/fajr_parser/fajr_parser.h b/source/fajr_parser/fajr_parser.h new file mode 100644 index 0000000..d83dde2 --- /dev/null +++ b/source/fajr_parser/fajr_parser.h @@ -0,0 +1,60 @@ +#ifndef EDITOR_PARSER_H +#define EDITOR_PARSER_H + +typedef enum syntax_node_type syntax_node_type; +enum syntax_node_type +{ + SyntaxNodeLiteral, + SyntaxNodeIdentifier, + SyntaxNodeBinary, + + SyntaxNodeAssignment, + SyntaxNodeReturn, + SyntaxNodeFunction, + SyntaxNodeUnwanted, +}; + +typedef struct syntax_node syntax_node; +struct syntax_node +{ + syntax_node *First; + syntax_node *Last; + syntax_node *Parent; + syntax_node *Next; + + token *Token; + + syntax_node_type Type; +}; + +typedef struct concrete_syntax_tree concrete_syntax_tree; +struct concrete_syntax_tree +{ + syntax_node *Root; + syntax_node *Current; +}; + +// TODO(nasr): implement this later together with file handling +read_only global_variable +syntax_node nil_syntax_node = +{ +.First = &nil_syntax_node, +.Last = &nil_syntax_node, +.Parent = &nil_syntax_node, +.Next = &nil_syntax_node, +.Token = &nil_token, +}; + +read_only global_variable +concrete_syntax_tree nil_concrete_syntax_tree = +{ +.Root = &nil_syntax_node, +.Current = &nil_syntax_node, +}; + +#define PeekForward(Node, Type, NilNode) \ + for(; (Node) && (Node) != &(NilNode); (Node) = (Node)->Next) \ + if((Node)->Token->Type == (Type)) \ + break; + +#endif // EDITOR_PARSER_H -- cgit v1.3