codebased/scirpt/parser.h
2023-04-16 04:45:15 +02:00

44 lines
1.3 KiB
C

#ifndef PARSER_H
#define PARSER_H
#include "scirpt/ast.h"
#include "scirpt/lexer.h"
#include "scirpt/parser.h"
#include "scirpt/position.h"
#include "scirpt/token.h"
#include <stddef.h>
#include <stdlib.h>
struct ScirptParser {
const char* text;
size_t text_length;
ScirptLexer* lexer;
ScirptToken current;
ScirptParserErrorArray errors;
bool ok;
};
void scirpt_parser_construct(
ScirptParser* parser,
const char* text,
size_t text_length,
ScirptLexer* lexer
);
void scirpt_parser_destroy(ScirptParser* parser);
ScirptAstExpr* scirpt_parser_parse_statement(ScirptParser* parser);
ScirptAstExpr* scirpt_parser_parse_expr(ScirptParser* parser);
ScirptAstExpr* scirpt_parser_parse_member_call_index_expr(ScirptParser* parser);
ScirptAstExpr* scirpt_parser_parse_operand(ScirptParser* parser);
ScirptAstExpr* scirpt_parser_parse_int_or_float(ScirptParser* parser);
ScirptAstExpr* scirpt_parser_parse_string(ScirptParser* parser);
ScirptAstExpr* scirpt_parser_parse_block(ScirptParser* parser);
ScirptAstExpr* scirpt_parser_parse_if(ScirptParser* parser);
void scirpt_parser_error(
ScirptParser* parser, HeapString message, ScirptPosition pos
);
void scirpt_parser_step(ScirptParser* parser);
bool scirpt_parser_current_is(const ScirptParser* parser, ScirptTokenType type);
bool scirpt_parser_done(const ScirptParser* parser);
#endif