45 lines
848 B
C
45 lines
848 B
C
#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); |