summaryrefslogtreecommitdiff
path: root/source/fajr_parser/fajr_parser.h
diff options
context:
space:
mode:
authornasr <nsrddyn@gmail.com>2026-03-26 22:35:30 +0100
committernasr <nsrddyn@gmail.com>2026-04-13 17:24:42 +0200
commitdd5586abec207dd4acd16d51ce0d392c03e5e957 (patch)
treee56573f49ebb2a3236a39148842dc80bde5a286d /source/fajr_parser/fajr_parser.h
feature(main): initmain
feature(main): init
Diffstat (limited to 'source/fajr_parser/fajr_parser.h')
-rw-r--r--source/fajr_parser/fajr_parser.h60
1 files changed, 60 insertions, 0 deletions
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 @@
1#ifndef EDITOR_PARSER_H
2#define EDITOR_PARSER_H
3
4typedef enum syntax_node_type syntax_node_type;
5enum syntax_node_type
6{
7 SyntaxNodeLiteral,
8 SyntaxNodeIdentifier,
9 SyntaxNodeBinary,
10
11 SyntaxNodeAssignment,
12 SyntaxNodeReturn,
13 SyntaxNodeFunction,
14 SyntaxNodeUnwanted,
15};
16
17typedef struct syntax_node syntax_node;
18struct syntax_node
19{
20 syntax_node *First;
21 syntax_node *Last;
22 syntax_node *Parent;
23 syntax_node *Next;
24
25 token *Token;
26
27 syntax_node_type Type;
28};
29
30typedef struct concrete_syntax_tree concrete_syntax_tree;
31struct concrete_syntax_tree
32{
33 syntax_node *Root;
34 syntax_node *Current;
35};
36
37// TODO(nasr): implement this later together with file handling
38read_only global_variable
39syntax_node nil_syntax_node =
40{
41.First = &nil_syntax_node,
42.Last = &nil_syntax_node,
43.Parent = &nil_syntax_node,
44.Next = &nil_syntax_node,
45.Token = &nil_token,
46};
47
48read_only global_variable
49concrete_syntax_tree nil_concrete_syntax_tree =
50{
51.Root = &nil_syntax_node,
52.Current = &nil_syntax_node,
53};
54
55#define PeekForward(Node, Type, NilNode) \
56 for(; (Node) && (Node) != &(NilNode); (Node) = (Node)->Next) \
57 if((Node)->Token->Type == (Type)) \
58 break;
59
60#endif // EDITOR_PARSER_H