Mercurial > lbo > hg > ylisp
view src/bin/ylisp.c @ 168:5697df53fe81
bin: Add interpreter binary src/bin/ylisp.
author | Lewin Bormann <lbo@spheniscida.de> |
---|---|
date | Tue, 03 Sep 2019 20:06:59 +0200 |
parents | |
children | cdf06bdd9592 |
line wrap: on
line source
#include <stdio.h> #include <src/parse.h> #include <src/preprocess.h> #include <src/eval.h> yexpr_t run(FILE* input, yeval_state_t* state, yvec_t** root) { yexpr_t file = yexpr_new(); yexpr_t result = yexpr_new(); ystr_t error = ystr_new(NULL); bool ok = yparse(input, &file, &error); if (!ok) { fprintf(stderr, "Parse error: %s\n", ystr_str(&error)); goto clean_all; } ypreprocess_resolve_builtins(&file); ypreprocess_refs_repl(&file, root); result = yeval_list_return_last(state, &file.value.list, 0); clean_all: yexpr_destroy(&file); ystr_destroy(&error); return result; } int main(int argc, char** argv) { yvec_t* root = NULL; yeval_state_t state; state.call_stack = YVEC_NEW(NULL, 16, yexpr_t); yexpr_t result = yexpr_new(); if (argc == 1) { result = run(stdin, &state, &root); } yvec_destroy(root); yvec_destroy(&state.call_stack); yexpr_destroy(&result); return 0; }