diff options
author | Bad Diode <bd@badd10de.dev> | 2022-03-31 08:18:36 +0200 |
---|---|---|
committer | Bad Diode <bd@badd10de.dev> | 2022-03-31 08:18:36 +0200 |
commit | 483a64aa0c5ee8dc925b7957e39c42744b892288 (patch) | |
tree | 86564a19bfc3255a04872815f7e1ac76d3b19cdc /src/parser.h | |
parent | 4d5d49b0d1282df08e3dc7dec3c550c544fbfccb (diff) | |
download | bdl-483a64aa0c5ee8dc925b7957e39c42744b892288.tar.gz bdl-483a64aa0c5ee8dc925b7957e39c42744b892288.zip |
Add type signature to def statements
Currently mandatory, may be optional once we have type inference.
Diffstat (limited to 'src/parser.h')
-rw-r--r-- | src/parser.h | 42 |
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 | ||
6 | typedef struct Parser { | 7 | typedef struct Parser { |
7 | Token *tokens; | 8 | Token *tokens; |
8 | size_t current; | 9 | size_t current; |
9 | } Parser; | 10 | } Parser; |
10 | 11 | ||
11 | typedef enum NodeType { | ||
12 | NODE_BUILTIN, | ||
13 | NODE_NUMBER, | ||
14 | NODE_BOOL, | ||
15 | NODE_STRING, | ||
16 | NODE_SYMBOL, | ||
17 | NODE_DEF, | ||
18 | } NodeType; | ||
19 | |||
20 | typedef 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 | |||
52 | void parse(Token *tokens); | 12 | void parse(Token *tokens); |
53 | Node * parse_next(Parser *parser); | 13 | Node * parse_next(Parser *parser); |
54 | 14 | ||