Files
cval/include/globals.h
yenru0 9c94663045 minor implementation
basic expr parsing (not complex like compound, lambda)
2025-11-25 23:29:57 +09:00

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;