This repository has been archived on 2026-03-01. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
v2/src/parser/parser.c

44 lines
1.4 KiB
C

#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 ++]);
}