mumble

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

commit 007741dad0cb9db0e34c77f2b3c964e568ec0eda
parent e5913ce78f87d2b182506bcf0857927e6aaca2be
Author: NunoSempere <nuno.sempere@protonmail.com>
Date:   Sun, 30 Apr 2023 23:58:31 -0400

step: generalize grammar

Diffstat:
Msrc/mumble.c | 18++++++++++--------
1 file changed, 10 insertions(+), 8 deletions(-)

diff --git a/src/mumble.c b/src/mumble.c @@ -179,19 +179,21 @@ int main(int argc, char** argv) /* Create Some Parsers */ mpc_parser_t* Number = mpc_new("number"); - mpc_parser_t* Operator = mpc_new("operator"); + mpc_parser_t* Symbol = mpc_new("symbol"); + mpc_parser_t* Sexpr = mpc_new("sexpr"); mpc_parser_t* Expr = mpc_new("expr"); mpc_parser_t* Mumble = mpc_new("mumble"); /* Define them with the following Language */ mpca_lang(MPCA_LANG_DEFAULT, - " \ - number : /-?[0-9]+/ ; \ - operator : '+' | '-' | '*' | '/' ; \ - expr : <number> | '(' <operator> <expr>+ ')' ; \ - mumble : /^/ <operator> <expr>+ | <expr>/$/ ; \ + " \ + number : /-?[0-9]+/ ; \ + symbol : '+' | '-' | '*' | '/' ; \ + sexpr : '(' <expr>* ')' ; \ + expr : <number> | <symbol> | <sexpr> ; \ + mumble : /^/ <expr>* /$/ ; \ ", - Number, Operator, Expr, Mumble); + Number, Symbol, Sexpr, Expr, Mumble); // Initialize a repl @@ -230,7 +232,7 @@ int main(int argc, char** argv) } /* Undefine and Delete our Parsers */ - mpc_cleanup(4, Number, Operator, Expr, Mumble); + mpc_cleanup(4, Number, Symbol, Sexpr, Expr, Mumble); return 0; }