aboutsummaryrefslogtreecommitdiffstats
path: root/src/parser.h
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2022-03-31 08:18:36 +0200
committerBad Diode <bd@badd10de.dev>2022-03-31 08:18:36 +0200
commit483a64aa0c5ee8dc925b7957e39c42744b892288 (patch)
tree86564a19bfc3255a04872815f7e1ac76d3b19cdc /src/parser.h
parent4d5d49b0d1282df08e3dc7dec3c550c544fbfccb (diff)
downloadbdl-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.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