65 lines
2.6 KiB
C
65 lines
2.6 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);
|
|
ScirptExpr* scirpt_parser_parse_statement(ScirptParser* parser);
|
|
ScirptExpr* scirpt_parser_parse_assign(ScirptParser* parser);
|
|
ScirptExpr* scirpt_parser_parse_expr(ScirptParser* parser);
|
|
ScirptExpr* scirpt_parser_parse_or(ScirptParser* parser);
|
|
ScirptExpr* scirpt_parser_parse_and(ScirptParser* parser);
|
|
ScirptExpr* scirpt_parser_parse_equality(ScirptParser* parser);
|
|
ScirptExpr* scirpt_parser_parse_comparison(ScirptParser* parser);
|
|
ScirptExpr* scirpt_parser_parse_add_subtract(ScirptParser* parser);
|
|
ScirptExpr* scirpt_parser_parse_multiply_divide_modulo(ScirptParser* parser);
|
|
ScirptExpr* scirpt_parser_parse_negate(ScirptParser* parser);
|
|
ScirptExpr* scirpt_parser_parse_exponent(ScirptParser* parser);
|
|
ScirptExpr* scirpt_parser_parse_unary(ScirptParser* parser);
|
|
ScirptExpr* scirpt_parser_parse_member_call_index_expr(ScirptParser* parser);
|
|
ScirptExpr* scirpt_parser_parse_operand(ScirptParser* parser);
|
|
ScirptExpr* scirpt_parser_parse_int_or_float(ScirptParser* parser);
|
|
ScirptExpr* scirpt_parser_parse_string(ScirptParser* parser);
|
|
ScirptExpr* scirpt_parser_parse_group(ScirptParser* parser);
|
|
ScirptExpr* scirpt_parser_parse_array(ScirptParser* parser);
|
|
ScirptExpr* scirpt_parser_parse_object(ScirptParser* parser);
|
|
ScirptExpr* scirpt_parser_parse_block(ScirptParser* parser);
|
|
ScirptExpr* scirpt_parser_parse_if(ScirptParser* parser);
|
|
ScirptExpr* scirpt_parser_parse_loop(ScirptParser* parser);
|
|
ScirptExpr* scirpt_parser_parse_while(ScirptParser* parser);
|
|
ScirptExpr* scirpt_parser_parse_for(ScirptParser* parser);
|
|
ScirptExpr* scirpt_parser_parse_lambda(ScirptParser* parser);
|
|
ScirptExpr* scirpt_parser_parse_function(ScirptParser* parser);
|
|
ScirptExpr* scirpt_parser_parse_let(ScirptParser* parser);
|
|
ScirptExpr* scirpt_parser_parse_return(ScirptParser* parser);
|
|
ScirptExpr* scirpt_parser_parse_break(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
|