96 lines
1.1 KiB
C
96 lines
1.1 KiB
C
#pragma once
|
|
#include <stddef.h>
|
|
#include <stdint.h>
|
|
|
|
/**
|
|
* Token Definitions
|
|
*/
|
|
typedef enum {
|
|
LBRACK,
|
|
RBRACK,
|
|
LCURLY,
|
|
RCURLY,
|
|
LPAREN,
|
|
RPAREN,
|
|
|
|
SEMI,
|
|
COMMA,
|
|
ARROW,
|
|
STAR,
|
|
ANDREF,
|
|
DOLLAR,
|
|
|
|
COMMENT,
|
|
ID,
|
|
NUM,
|
|
STRING_LITERAL,
|
|
|
|
VAL,
|
|
RETURN,
|
|
IF,
|
|
ELSE,
|
|
|
|
EOF_TOKEN,
|
|
ERROR,
|
|
// for parser use
|
|
|
|
PARSER_USE,
|
|
|
|
VOID,
|
|
|
|
} TokenType;
|
|
|
|
typedef struct {
|
|
size_t len;
|
|
char *string;
|
|
} TokenString;
|
|
|
|
typedef struct {
|
|
TokenType type;
|
|
uint32_t line;
|
|
TokenString data;
|
|
} Token;
|
|
|
|
/**
|
|
* AST Node Definitions
|
|
*/
|
|
|
|
typedef enum {
|
|
NODE_PROGRAM,
|
|
NODE_DEFN,
|
|
|
|
NODE_TYPE_SIMPLE,
|
|
NODE_TYPE_COMPLEX,
|
|
NODE_TYPE_PARAM,
|
|
NODE_TYPE_OUT,
|
|
NODE_TYPE_STAR,
|
|
|
|
NODE_EXPR,
|
|
|
|
NODE_ID,
|
|
NODE_NUM,
|
|
NODE_STR,
|
|
NODE_STAR,
|
|
NODE_ANDREF,
|
|
|
|
NODE_PARAM_LIST,
|
|
NODE_PARAM,
|
|
|
|
NODE_LAMBDA,
|
|
NODE_COMPOUND,
|
|
|
|
NODE_STMT_RETURN,
|
|
NODE_STMT_EXPR,
|
|
NODE_STMT_SET,
|
|
NODE_STMT_IF,
|
|
|
|
} NodeKind;
|
|
|
|
typedef struct ASTNode {
|
|
NodeKind kind;
|
|
Token token;
|
|
|
|
struct ASTNode **children;
|
|
size_t count;
|
|
size_t capacity;
|
|
} ASTNode; |