mumble

A Lisp written in C, following the *Build Your Own Lisp* book
Log | Files | Refs | README

commit c3720d0951b756ccfab2b2dcedddcb61702196b1
parent e9a6558d4bf594d6de5c9c13062b9d7d73f4517f
Author: NunoSempere <nuno.sempere@protonmail.com>
Date:   Sun, 30 Apr 2023 00:47:58 -0400

step: save progress with mpc integration

Diffstat:
Mmumble | 0
Msrc/mumble.c | 23+++++++++++++++++------
2 files changed, 17 insertions(+), 6 deletions(-)

diff --git a/mumble b/mumble Binary files differ. diff --git a/src/mumble.c b/src/mumble.c @@ -7,14 +7,14 @@ int main(int argc, char** argv) { - puts("Mumble version 0.0.1\n"); + puts("Mumble version 0.0.2\n"); puts("Press Ctrl+C/Ctrl+D to exit\n"); /* Create Some Parsers */ mpc_parser_t* Number = mpc_new("number"); mpc_parser_t* Operator = mpc_new("operator"); mpc_parser_t* Expr = mpc_new("expr"); - mpc_parser_t* Lispy = mpc_new("lispy"); + mpc_parser_t* Mumble = mpc_new("mumble"); /* Define them with the following Language */ mpca_lang(MPCA_LANG_DEFAULT, @@ -22,9 +22,9 @@ int main(int argc, char** argv) number : /-?[0-9]+/ ; \ operator : '+' | '-' | '*' | '/' ; \ expr : <number> | '(' <operator> <expr>+ ')' ; \ - lispy : /^/ <operator> <expr>+ /$/ ; \ + mumble : /^/ <operator> <expr>+ /$/ ; \ ", - Number, Operator, Expr, Lispy); + Number, Operator, Expr, Mumble); int loop = 1; while (loop) { @@ -34,7 +34,18 @@ int main(int argc, char** argv) loop = 0; puts(""); } else { - printf("Did you say \"%s\"?\n", input); + /* Attempt to Parse the user Input */ + mpc_result_t r; + if (mpc_parse("<stdin>", input, Mumble, &r)) { + /* On Success Print the AST */ + mpc_ast_print(r.output); + mpc_ast_delete(r.output); + } else { + /* Otherwise Print the Error */ + mpc_err_print(r.error); + mpc_err_delete(r.error); + } + // printf("Did you say \"%s\"?\n", input); add_history(input); // can't add if input is NULL } @@ -42,7 +53,7 @@ int main(int argc, char** argv) } /* Undefine and Delete our Parsers */ - mpc_cleanup(4, Number, Operator, Expr, Lispy); + mpc_cleanup(4, Number, Operator, Expr, Mumble); return 0; }