#include "parser.h" #include "SolsNode.h" #include "../include/estr.h" ResultType(SolsParser, charptr) createSolsParser(SolsTokens* input) { ResultType(SolsNode, charptr) node = createSolsNode(SNT_ROOT); if (node.error) { Estr str = CREATE_ESTR(node.as.error); APPEND_ESTR(str, " (in createSolsParser() function)"); } SolsParser parser = { .input = input, .current = 0, .output = node.as.success }; parser.currentParent = &parser.output; return Success(SolsParser, charptr, parser); } ResultType(Nothing, charptr) parse(SolsParser* parser) { return Error(Nothing, charptr, "Work in progress"); } ResultType(SolsToken, Nothing) parserPeek(SolsParser* parser, size_t ahead) { if (parser->input == NULL) { return Error(SolsToken, Nothing, {}); } if (parser->current + ahead - 1 >= parser->input->count) { return Error(SolsToken, Nothing, {}); } return Success(SolsToken, Nothing, parser->input->at[parser->current + ahead - 1]); } ResultType(SolsToken, Nothing) parserConsume(SolsParser* parser) { if (parser->input == NULL) { return Error(SolsToken, Nothing, {}); } if (parser->current + 1 >= parser->input->count) { return Error(SolsToken, Nothing, {}); } return Success(SolsToken, Nothing, parser->input->at[parser->current ++]); }