diff options
author | Preston Pan <preston@nullring.xyz> | 2023-01-08 10:00:08 -0800 |
---|---|---|
committer | Preston Pan <preston@nullring.xyz> | 2023-01-08 10:00:08 -0800 |
commit | aa1dd020edb82f26dd5bc29378177cfcaa4c53ed (patch) | |
tree | 4785b6311ac14be5939d33ebb5b0d8988c8f56bd /src | |
parent | 8edafecb633fec2b6327d996c1e7c282f4f1792f (diff) |
print functions completed
Diffstat (limited to 'src')
-rw-r--r-- | src/lexer.c | 4 | ||||
-rw-r--r-- | src/main.c | 2 | ||||
-rw-r--r-- | src/print.c | 48 | ||||
-rw-r--r-- | src/visitor.c | 1 |
4 files changed, 16 insertions, 39 deletions
diff --git a/src/lexer.c b/src/lexer.c index 29c6542..e58197a 100644 --- a/src/lexer.c +++ b/src/lexer.c @@ -26,7 +26,7 @@ lexer_t *init_lexer(char *source) { } void lexer_move(lexer_t *lexer) { - if (lexer->c != '\0') { + if (lexer->c != '\0' && lexer->c != EOF) { lexer->i++; lexer->c = lexer->source[lexer->i]; if (lexer->c == '\n') { @@ -39,7 +39,7 @@ void lexer_move(lexer_t *lexer) { void lexer_ignore_whitespace(lexer_t *lexer) { while (isspace(lexer->c)) { - if (lexer->c == '\0') + if (lexer->c == '\0' || lexer->c == EOF) return; lexer_move(lexer); } @@ -132,7 +132,7 @@ int main(int argc, char **argv) { exit(1); } if (strcmp(argv[1], "-v") == 0 || strcmp(argv[1], "--version") == 0) { - printf("nxs, version 1.0.0 alpha\n"); + printf("nxs, version 1.2 alpha\n"); exit(0); } diff --git a/src/print.c b/src/print.c index b2d4f32..65cfb66 100644 --- a/src/print.c +++ b/src/print.c @@ -2,56 +2,32 @@ #include "./include/ast.h" #include <stdio.h> -void print_string(ast_t *str) { printf("%s\n", str->string_value); } +void print_string(ast_t *str) { printf("%s", str->string_value); } -void print_int(ast_t *i) { printf("%d\n", i->int_value); } +void print_int(ast_t *i) { printf("%d", i->int_value); } void print_bool(ast_t *b) { if (b->bool_value) - printf("T\n"); + printf("T"); else - printf("F\n"); + printf("F"); } -void print_float(ast_t *f) { printf("%f\n", f->float_value); } +void print_float(ast_t *f) { printf("%f", f->float_value); } -void print_symbol(ast_t *s) { printf("S: %s\n", s->string_value); } +void print_symbol(ast_t *s) { printf(":%s", s->string_value); } void print_func(ast_t *f) { print_pair(f->cdr); } void print_pair(ast_t *p) { printf("("); ast_t *cur = p; - bool is_last = false; - - while (cur != NULL && (cur->cdr != NULL && cur->cdr->car != NULL)) { - if (cur->cdr == NULL) { - is_last = true; - } - switch (cur->car->type) { - case AST_STRING: - printf("%s", cur->car->string_value); - break; - case AST_INT: - printf("%d", cur->car->int_value); - break; - case AST_FLOAT: - printf("%d", cur->car->int_value); - break; - case AST_BOOL: - printf("%d", cur->car->int_value); - break; - case AST_FUNCTION: - break; - case AST_SYMBOL: - printf("%d", cur->car->int_value); - break; - case AST_PAIR: - printf("%d", cur->car->int_value); - break; - case AST_ROOT: - break; - } + while (cur != NULL && (cur->cdr != NULL && cur->car != NULL)) { + print(cur->car); + if (cur->cdr->cdr != NULL) { + printf(" "); + } else + printf(")"); cur = cur->cdr; } } diff --git a/src/visitor.c b/src/visitor.c index 374ad02..6fd487a 100644 --- a/src/visitor.c +++ b/src/visitor.c @@ -447,6 +447,7 @@ ast_t *eval_list(visitor_t *v, ast_t *e) { ast_t *arg1 = eval_expr(v, args->car); print(arg1); + printf("\n"); return arg1; } |