Files
fz-lang/src/compiler/parser/pa_program.c
T

43 lines
704 B
C

#include <compiler/fzl_parser.h>
#include <compiler/internals/parser.h>
#include <stdio.h>
// Internal parsing entry point
fzl_node_t *pa_program(fzl_parser_t *parser)
{
if (!peek(parser))
return NULL;
fzl_node_t *first = NULL;
fzl_node_t *last = NULL;
fzl_node_t *node = NULL;
while (peek(parser) != NULL)
{
node = pa_statement(parser);
if (!node)
{
fzl_freeast(first);
return NULL;
}
if (!last)
{
first = node;
last = node;
}
else
{
last->next = node;
last = node;
}
}
if (!first)
{
snprintf(plast_err, sizeof(plast_err), "nothing to parse >:(");
return NULL;
}
return first;
}