From 77409407d9e351494b0341c40d37a93a8a15515a Mon Sep 17 00:00:00 2001 From: NunoSempere Date: Sun, 30 Apr 2023 12:13:10 -0400 Subject: [PATCH] step: add lispval wrapper. --- mumble | Bin 102428 -> 102908 bytes src/mumble.c | 101 +++++++++++++++++++++++++++++++++++++++------------ 2 files changed, 78 insertions(+), 23 deletions(-) diff --git a/mumble b/mumble index 32556f0a0a380354b5f9c6f3840d0ce7eeec5a14..2d7ac87911f28b235fe1ff0285e2811acbcf763e 100755 GIT binary patch delta 29024 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 delta 29063 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 Rj>OgvUnRtQn13D#{69&s1bzSj diff --git a/src/mumble.c b/src/mumble.c index adedf4a..e0f8b85 100644 --- a/src/mumble.c +++ b/src/mumble.c @@ -7,6 +7,79 @@ #include "mpc/mpc.h" #define VERBOSE 1 +// Types +typedef struct { + int type; + long num; + int err; +} lispval; + +enum { LISPVAL_NUM, LISPVAL_ERR }; +enum { LISPERR_DIV_ZERO, LISPERR_BAD_OP, LISPERR_BAD_NUM }; + +lispval lispval_num(long x){ + lispval v; + v.type = LISPVAL_NUM; + v.num = x; + return v; +} +lispval lispval_err(int i){ + lispval v; + v.type = LISPVAL_ERR; + v.err = i; + return v; +} +void print_lispval(lispval l){ + switch(l.type){ + case LISPVAL_NUM: + printf("%li", l.num); + break; + case LISPVAL_ERR: + switch(l.err){ + case LISPERR_BAD_OP: + printf("Error: Invalid operator"); + break; + case LISPERR_BAD_NUM: + printf("Error: Invalid number"); + break; + case LISPERR_DIV_ZERO: + printf("Error: Division by zero"); + break; + default: + printf("Error: Unknown error"); + } + break; + default: + printf("Unknown lispval type"); + } + printf("\n"); +} + +// Utils +int is_ignorable(mpc_ast_t* t){ + int is_regex = !strcmp(t->tag, "regex"); + int is_parenthesis = !strcmp(t->tag, "char") && !strcmp(t->contents, "("); + return is_regex || is_parenthesis; +} + +void print_ast(mpc_ast_t* ast, int num_tabs) +{ + char tabs[100] = ""; + for(int i=0; itag); + printf("\n%sContents: %s", tabs, strcmp(ast->contents, "") ? ast->contents : "None"); + printf("\n%sNumber of children: %i", tabs, ast->children_num); + /* Print the children */ + for (int i = 0; i < ast->children_num; i++) { + mpc_ast_t* child_i = ast->children[i]; + printf("\n%sChild #%d", tabs, i); + print_ast(child_i, 1); + } +} + +// Operations long evaluate_unary_operation(char* op, long x) { if (!strcmp(op, "+")) { @@ -30,11 +103,7 @@ long evaluate_operation(char* op, long x, long y) return 0; } -int is_ignorable(mpc_ast_t* t){ - int is_regex = !strcmp(t->tag, "regex"); - int is_parenthesis = !strcmp(t->tag, "char") && !strcmp(t->contents, "("); - return is_regex || is_parenthesis; -} +// Evaluate the AST long evaluate_ast(mpc_ast_t* t) { // Base case #1: It's a number @@ -90,25 +159,10 @@ long evaluate_ast(mpc_ast_t* t) return x; } -void print_ast(mpc_ast_t* ast, int num_tabs) -{ - char tabs[100] = ""; - for(int i=0; itag); - printf("\n%sContents: %s", tabs, strcmp(ast->contents, "") ? ast->contents : "None"); - printf("\n%sNumber of children: %i", tabs, ast->children_num); - /* Print the children */ - for (int i = 0; i < ast->children_num; i++) { - mpc_ast_t* child_i = ast->children[i]; - printf("\n%sChild #%d", tabs, i); - print_ast(child_i, 1); - } -} - +// Main int main(int argc, char** argv) { + // Info puts("Mumble version 0.0.2\n"); puts("Press Ctrl+C/Ctrl+D to exit\n"); @@ -127,7 +181,9 @@ int main(int argc, char** argv) mumble : /^/ + | /$/ ; \ ", Number, Operator, Expr, Mumble); + + // Initialize a repl int loop = 1; while (loop) { char* input = readline("mumble> "); @@ -155,7 +211,6 @@ int main(int argc, char** argv) mpc_err_print(result.error); mpc_err_delete(result.error); } - // printf("Did you say \"%s\"?\n", input); add_history(input); // can't add if input is NULL }