summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/lexer.c4
-rw-r--r--src/main.c2
-rw-r--r--src/print.c48
-rw-r--r--src/visitor.c1
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);
}
diff --git a/src/main.c b/src/main.c
index db5846d..c75ef85 100644
--- a/src/main.c
+++ b/src/main.c
@@ -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;
}