aboutsummaryrefslogtreecommitdiffstats
path: root/src/parser.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/parser.h')
-rw-r--r--src/parser.h42
1 files changed, 1 insertions, 41 deletions
diff --git a/src/parser.h b/src/parser.h
index 6a4401e..47316b9 100644
--- a/src/parser.h
+++ b/src/parser.h
@@ -2,53 +2,13 @@
2#define BDL_PARSER_H 2#define BDL_PARSER_H
3 3
4#include "lexer.h" 4#include "lexer.h"
5#include "nodes.h"
5 6
6typedef struct Parser { 7typedef struct Parser {
7 Token *tokens; 8 Token *tokens;
8 size_t current; 9 size_t current;
9} Parser; 10} Parser;
10 11
11typedef enum NodeType {
12 NODE_BUILTIN,
13 NODE_NUMBER,
14 NODE_BOOL,
15 NODE_STRING,
16 NODE_SYMBOL,
17 NODE_DEF,
18} NodeType;
19
20typedef struct Node {
21 NodeType type;
22
23 union {
24 // Numbers.
25 struct {
26 bool negative;
27 size_t integral;
28 size_t fractional;
29 } number;
30
31 // String/symbol.
32 StringView string;
33
34 // Boolean.
35 bool boolean;
36
37 // Builtin primitive.
38 struct {
39 TokenType type;
40 struct Node **args;
41 } builtin;
42
43 // Variable definition.
44 struct {
45 struct Node *symbol;
46 struct Node *value;
47 // TODO: type information
48 } def;
49 };
50} Node;
51
52void parse(Token *tokens); 12void parse(Token *tokens);
53Node * parse_next(Parser *parser); 13Node * parse_next(Parser *parser);
54 14