minor declr parser

This commit is contained in:
2025-11-17 15:49:06 +09:00
parent 1e15ec36d2
commit 3682559a56
3 changed files with 92 additions and 2 deletions

View File

@@ -1,7 +1,10 @@
#pragma once
#include <stdint.h>
#include <stddef.h>
#include <stdint.h>
/**
* Token Definitions
*/
typedef enum {
LBRACK,
RBRACK,
@@ -33,7 +36,7 @@ typedef enum {
typedef struct {
size_t len;
char* string;
char *string;
} TokenString;
typedef struct {
@@ -42,3 +45,11 @@ typedef struct {
TokenString data;
} Token;
/**
* AST Node Definitions
*/
typedef struct ASTNode {
Token token;
struct ASTNode **children;
size_t child_count;
} ASTNode;

View File

@@ -0,0 +1,45 @@
#pragma once
#include <stdint.h>
#include "globals.h"
#include "lex.h"
typedef struct Parser {
Lexer *lexer;
Token current;
Token peek;
int flag_error;
} Parser;
Parser *parser_new(Lexer *lexer);
void parser_free(Parser *parser);
static void parser_next(Parser *parser);
static void parser_expect(Parser *parser, TokenType type);
/*
PARSER PARSE FUNCTIONS
*/
ASTNode *parser_parse_program(Parser *parser);
ASTNode *parser_parse_defn(Parser *parser);
ASTNode *parser_parse_type(Parser *parser);
ASTNode *parser_parse_expr(Parser *parser);
ASTNode *parser_parse_atom(Parser *parser);
ASTNode *parser_parse_stmt(Parser *parser);
ASTNode *parser_parse_block(Parser *parser);
ASTNode *parser_parse_lambda(Parser *parser);
ASTNode *parser_parse_compound(Parser *parser);
ASTNode *parser_parse_params(Parser *parser);

View File

@@ -2,3 +2,37 @@
#include <stdlib.h>
Parser *parser_new(Lexer *lexer) {
Parser *parser = malloc(sizeof(Parser));
if (parser == NULL) {
return NULL;
}
parser->lexer = lexer;
parser->flag_error = 0;
parser_next(parser);
parser_next(parser);
return parser;
}
void parser_free(Parser *parser) {
free(parser);
}
static void parser_next(Parser *parser) {
parser->current = parser->peek;
parser->peek = lexer_next_token(parser->lexer);
}
static void parser_expect(Parser *parser, TokenType type) {
if (parser->current.type == type) {
parser_next(parser);
} else {
parser->flag_error = 1;
}
}
/*
IMPL. PARSER PARSE FUNCTIONS
*/