diff --git a/.gitignore b/.gitignore index c081805..6ca25cb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ -/arcane-scheme-lisp -/arcane-scheme-lisp-test +/arcana-lisp +/arcana-lisp-test /src/*.o /tests/*.out diff --git a/Makefile b/Makefile index cfb48bc..53a6238 100644 --- a/Makefile +++ b/Makefile @@ -21,7 +21,7 @@ TEST_OUTS = \ tests/arithm_ops.out \ tests/basic_data_structs.out \ tests/hello.out \ - tests/arcane.out \ + tests/arcana.out \ tests/equiv.out \ tests/logic_ops.out \ tests/syntax.out \ @@ -31,15 +31,15 @@ TEST_OUTS = \ MAIN_OBJS = $(OBJS) src/main.c.o TEST_OBJS = $(OBJS) src/main-test.c.o -repl: arcane-scheme-lisp - ./arcane-scheme-lisp +repl: arcana-lisp + ./arcana-lisp -test: arcane-scheme-lisp-test $(TEST_OUTS) - ./arcane-scheme-lisp-test +test: arcana-lisp-test $(TEST_OUTS) + ./arcana-lisp-test $(DIFF_Q) tests/arithm_ops.txt tests/arithm_ops.out $(DIFF_Q) tests/basic_data_structs.txt tests/basic_data_structs.out $(DIFF_Q) tests/hello.txt tests/hello.out - $(DIFF_Q) tests/arcane.txt tests/arcane.out + $(DIFF_Q) tests/arcana.txt tests/arcana.out $(DIFF_Q) tests/equiv.txt tests/equiv.out $(DIFF_Q) tests/logic_ops.txt tests/logic_ops.out $(DIFF_Q) tests/syntax.txt tests/syntax.out @@ -47,16 +47,16 @@ test: arcane-scheme-lisp-test $(TEST_OUTS) $(DIFF_Q) tests/type_preds.txt tests/type_preds.out clean: - $(RM_F) arcane-scheme-lisp arcane-scheme-lisp-test $(MAIN_OBJS) $(TEST_OBJS) $(TEST_OUTS) + $(RM_F) arcana-lisp arcana-lisp-test $(MAIN_OBJS) $(TEST_OBJS) $(TEST_OUTS) -arcane-scheme-lisp: $(MAIN_OBJS) +arcana-lisp: $(MAIN_OBJS) $(CC) -o $@ $^ $(CFLAGS) -arcane-scheme-lisp-test: $(TEST_OBJS) +arcana-lisp-test: $(TEST_OBJS) $(CC) -o $@ $^ $(CFLAGS) %.c.o: %.c $(CC) -c $< -o $@ $(CFLAGS) -tests/%.out: tests/%.scm arcane-scheme-lisp - $(CAT) $< | ./arcane-scheme-lisp > $@ +tests/%.out: tests/%.scm arcana-lisp + $(CAT) $< | ./arcana-lisp > $@ diff --git a/src/builtins.c b/src/builtins.c index b0724ee..c2384ef 100644 --- a/src/builtins.c +++ b/src/builtins.c @@ -11,10 +11,10 @@ #include #include -// Arcane Scheme Lisp internals -static struct Object *func_arcane_SLASH_parse(size_t args_count, struct Object **args_array); -static struct Object *func_arcane_SLASH_tokenize(size_t args_count, struct Object **args_array); -static struct Object *func_arcane_SLASH_typeof(size_t args_count, struct Object **args_array); +// Arcana Lisp internals +static struct Object *func_arcana_SLASH_parse(size_t args_count, struct Object **args_array); +static struct Object *func_arcana_SLASH_tokenize(size_t args_count, struct Object **args_array); +static struct Object *func_arcana_SLASH_typeof(size_t args_count, struct Object **args_array); // Basic data structures static struct Object *func_car(size_t args_count, struct Object **args_array); static struct Object *func_cdr(size_t args_count, struct Object **args_array); @@ -47,10 +47,10 @@ static struct Object *func_displayln(size_t args_count, struct Object **args_arr static struct Object *func_newline(size_t args_count, struct Object **args_array); static struct Object builtins[] = { - // Arcane Scheme Lisp internals - { .type = TYPE_PROCEDURE, .procedure = { "arcane/parse", func_arcane_SLASH_parse } }, - { .type = TYPE_PROCEDURE, .procedure = { "arcane/tokenize", func_arcane_SLASH_tokenize } }, - { .type = TYPE_PROCEDURE, .procedure = { "arcane/typeof", func_arcane_SLASH_typeof } }, + // Arcana Lisp internals + { .type = TYPE_PROCEDURE, .procedure = { "arcana/parse", func_arcana_SLASH_parse } }, + { .type = TYPE_PROCEDURE, .procedure = { "arcana/tokenize", func_arcana_SLASH_tokenize } }, + { .type = TYPE_PROCEDURE, .procedure = { "arcana/typeof", func_arcana_SLASH_typeof } }, // Basic data structures { .type = TYPE_PROCEDURE, .procedure = { "car", func_car } }, { .type = TYPE_PROCEDURE, .procedure = { "cdr", func_cdr } }, @@ -96,11 +96,11 @@ struct Object *builtins_get(const char *name) return NULL; } -/******************************** - * Arcane Scheme Lisp internals * - ********************************/ +/************************* + * Arcana Lisp internals * + *************************/ -struct Object *func_arcane_SLASH_parse( +struct Object *func_arcana_SLASH_parse( size_t args_count, struct Object **args_array ) { @@ -162,7 +162,7 @@ struct Object *func_arcane_SLASH_parse( return program; } -struct Object *func_arcane_SLASH_tokenize( +struct Object *func_arcana_SLASH_tokenize( const size_t args_count, struct Object **const args_array ) { @@ -222,7 +222,7 @@ struct Object *func_arcane_SLASH_tokenize( return list; } -struct Object *func_arcane_SLASH_typeof( +struct Object *func_arcana_SLASH_typeof( const size_t args_count, struct Object **const args_array ) { diff --git a/src/builtins.h b/src/builtins.h index 93436c4..43f7934 100644 --- a/src/builtins.h +++ b/src/builtins.h @@ -1,5 +1,5 @@ -#ifndef __ARCANE_SCHEME_LISP_BUILTINS_H__ -#define __ARCANE_SCHEME_LISP_BUILTINS_H__ +#ifndef __ARCANA_LISP_BUILTINS_H__ +#define __ARCANA_LISP_BUILTINS_H__ #include "object.h" diff --git a/src/ctype.h b/src/ctype.h index e18efb4..f457748 100644 --- a/src/ctype.h +++ b/src/ctype.h @@ -1,5 +1,5 @@ -#ifndef __ARCANE_SCHEME_LISP_CTYPE_H__ -#define __ARCANE_SCHEME_LISP_CTYPE_H__ +#ifndef __ARCANA_LISP_CTYPE_H__ +#define __ARCANA_LISP_CTYPE_H__ #include diff --git a/src/eval.h b/src/eval.h index 18aa00c..3e924d6 100644 --- a/src/eval.h +++ b/src/eval.h @@ -1,5 +1,5 @@ -#ifndef __ARCANE_SCHEME_LISP_EVAL_H__ -#define __ARCANE_SCHEME_LISP_EVAL_H__ +#ifndef __ARCANA_LISP_EVAL_H__ +#define __ARCANA_LISP_EVAL_H__ #include "object.h" diff --git a/src/lexer.h b/src/lexer.h index a9be03b..452981d 100644 --- a/src/lexer.h +++ b/src/lexer.h @@ -1,5 +1,5 @@ -#ifndef __ARCANE_SCHEME_LISP_LEXER_H__ -#define __ARCANE_SCHEME_LISP_LEXER_H__ +#ifndef __ARCANA_LISP_LEXER_H__ +#define __ARCANA_LISP_LEXER_H__ #include "tokens.h" diff --git a/src/main-test.c b/src/main-test.c index 7664225..de5cee2 100644 --- a/src/main-test.c +++ b/src/main-test.c @@ -11,9 +11,9 @@ static struct Object *result = NULL; static void test_begin(); static void test_if(); static void test_quote(); -// Arcane Scheme Lisp internals -static void test_arcane_SLASH_tokenize(); -static void test_arcane_SLASH_typeof(); +// Arcana Lisp internals +static void test_arcana_SLASH_tokenize(); +static void test_arcana_SLASH_typeof(); // Basic data structures static void test_car(); static void test_cdr(); @@ -44,9 +44,9 @@ int main() test_begin(); test_if(); test_quote(); - // Arcane Scheme Lisp internals - test_arcane_SLASH_tokenize(); - test_arcane_SLASH_typeof(); + // Arcana Lisp internals + test_arcana_SLASH_tokenize(); + test_arcana_SLASH_typeof(); // Basic data structures test_car(); test_cdr(); @@ -259,15 +259,15 @@ void test_quote() assert(result->pair.cdr->pair.cdr->pair.car->number.i64 == 456); } -/******************************** - * Arcane Scheme Lisp internals * - ********************************/ +/************************* + * Arcana Lisp internals * + *************************/ -void test_arcane_SLASH_tokenize() +void test_arcana_SLASH_tokenize() { - // (arcane/tokenize "(") + // (arcana/tokenize "(") // ((TOKEN_ROUND_OPEN . "")) - result = eval_str("(arcane/tokenize \"(\")"); + result = eval_str("(arcana/tokenize \"(\")"); assert(Object_is_pair(result)); assert(OBJECT_IS_NULL(result->pair.cdr)); assert(Object_is_pair(result->pair.car)); @@ -276,9 +276,9 @@ void test_arcane_SLASH_tokenize() assert(strcmp(result->pair.car->pair.car->s, "TOKEN_ROUND_OPEN") == 0); assert(strcmp(result->pair.car->pair.cdr->s, "(") == 0); - // (arcane/tokenize "#false") + // (arcana/tokenize "#false") // ((TOKEN_TAG . "false")) - result = eval_str("(arcane/tokenize \"#false\")"); + result = eval_str("(arcana/tokenize \"#false\")"); assert(Object_is_pair(result)); assert(OBJECT_IS_NULL(result->pair.cdr)); assert(Object_is_pair(result->pair.car)); @@ -287,11 +287,11 @@ void test_arcane_SLASH_tokenize() assert(strcmp(result->pair.car->pair.car->s, "TOKEN_TAG") == 0); assert(strcmp(result->pair.car->pair.cdr->s, "false") == 0); - // (arcane/tokenize "\"\"") + // (arcana/tokenize "\"\"") // ((TOKEN_STRING . "")) result = eval(Object_build_list( 2, - Object_new_symbol("arcane/tokenize"), + Object_new_symbol("arcana/tokenize"), Object_new_string("\"\"") )); assert(Object_is_pair(result)); @@ -302,11 +302,11 @@ void test_arcane_SLASH_tokenize() assert(strcmp(result->pair.car->pair.car->s, "TOKEN_STRING") == 0); assert(strcmp(result->pair.car->pair.cdr->s, "") == 0); - // (arcane/tokenize "\"qwe\"") + // (arcana/tokenize "\"qwe\"") // ((TOKEN_STRING . "")) result = eval(Object_build_list( 2, - Object_new_symbol("arcane/tokenize"), + Object_new_symbol("arcana/tokenize"), Object_new_string("\"qwe\"") )); assert(Object_is_pair(result)); @@ -317,9 +317,9 @@ void test_arcane_SLASH_tokenize() assert(strcmp(result->pair.car->pair.car->s, "TOKEN_STRING") == 0); assert(strcmp(result->pair.car->pair.cdr->s, "qwe") == 0); - // (arcane/tokenize "(displayln (list 1))") + // (arcana/tokenize "(displayln (list 1))") // ((TOKEN_ROUND_OPEN . "(") (TOKEN_IDENT . "displayln") (TOKEN_ROUND_OPEN . "(") (TOKEN_IDENT . "list") (TOKEN_NUM . "1") (TOKEN_ROUND_CLOSE . ")") (TOKEN_ROUND_CLOSE . ")")) - result = eval_str("(arcane/tokenize \"(displayln (list 1))\")"); + result = eval_str("(arcana/tokenize \"(displayln (list 1))\")"); { assert(Object_is_pair(result)); assert(Object_is_pair(result->pair.cdr)); @@ -380,57 +380,57 @@ void test_arcane_SLASH_tokenize() } } -void test_arcane_SLASH_typeof() +void test_arcana_SLASH_typeof() { - // (arcane/typeof '()) + // (arcana/typeof '()) // null - result = eval_str("(arcane/typeof '())"); + result = eval_str("(arcana/typeof '())"); assert(Object_is_symbol(result)); assert(strcmp(result->s, "null") == 0); - // (arcane/typeof +) + // (arcana/typeof +) // procedure - result = eval_str("(arcane/typeof +)"); + result = eval_str("(arcana/typeof +)"); assert(Object_is_symbol(result)); assert(strcmp(result->s, "procedure") == 0); - // (arcane/typeof (cons 123 456)) + // (arcana/typeof (cons 123 456)) // pair - result = eval_str("(arcane/typeof (cons 123 456))"); + result = eval_str("(arcana/typeof (cons 123 456))"); assert(Object_is_symbol(result)); assert(strcmp(result->s, "pair") == 0); - // (arcane/typeof #false) + // (arcana/typeof #false) // boolean - result = eval_str("(arcane/typeof #false)"); + result = eval_str("(arcana/typeof #false)"); assert(Object_is_symbol(result)); assert(strcmp(result->s, "boolean") == 0); - // (arcane/typeof #\n) + // (arcana/typeof #\n) // char result = eval(Object_build_list( 2, - Object_new_symbol("arcane/typeof"), + Object_new_symbol("arcana/typeof"), Object_new_char('\n') )); assert(Object_is_symbol(result)); assert(strcmp(result->s, "char") == 0); - // (arcane/typeof 'foo) + // (arcana/typeof 'foo) // symbol - result = eval_str("(arcane/typeof 'foo)"); + result = eval_str("(arcana/typeof 'foo)"); assert(Object_is_symbol(result)); assert(strcmp(result->s, "symbol") == 0); - // (arcane/typeof "foo") + // (arcana/typeof "foo") // string - result = eval_str("(arcane/typeof \"foo\")"); + result = eval_str("(arcana/typeof \"foo\")"); assert(Object_is_symbol(result)); assert(strcmp(result->s, "string") == 0); - // (arcane/typeof 123) + // (arcana/typeof 123) // number - result = eval_str("(arcane/typeof 123)"); + result = eval_str("(arcana/typeof 123)"); assert(Object_is_symbol(result)); assert(strcmp(result->s, "number") == 0); } diff --git a/src/main.c b/src/main.c index 764cf0c..0c28d9f 100644 --- a/src/main.c +++ b/src/main.c @@ -30,6 +30,8 @@ int main() void repl() { + printf("Lisp by Causa Arcana\n\n"); + while (true) { Tokens tokens = Tokens_new(); assert(tokens); diff --git a/src/object.h b/src/object.h index b6ad4dc..f4052d6 100644 --- a/src/object.h +++ b/src/object.h @@ -1,5 +1,5 @@ -#ifndef __ARCANE_SCHEME_LISP_OBJECT_H__ -#define __ARCANE_SCHEME_LISP_OBJECT_H__ +#ifndef __ARCANA_LISP_OBJECT_H__ +#define __ARCANA_LISP_OBJECT_H__ #include #include diff --git a/src/parser.h b/src/parser.h index 30cafac..cc6c85b 100644 --- a/src/parser.h +++ b/src/parser.h @@ -1,5 +1,5 @@ -#ifndef __ARCANE_SCHEME_LISP_PARSER_H__ -#define __ARCANE_SCHEME_LISP_PARSER_H__ +#ifndef __ARCANA_LISP_PARSER_H__ +#define __ARCANA_LISP_PARSER_H__ #include "object.h" #include "tokens.h" diff --git a/src/syntax.h b/src/syntax.h index af6d4c6..1bfe67a 100644 --- a/src/syntax.h +++ b/src/syntax.h @@ -1,5 +1,5 @@ -#ifndef __ARCANE_SCHEME_LISP_SYNTAX_H__ -#define __ARCANE_SCHEME_LISP_SYNTAX_H__ +#ifndef __ARCANA_LISP_SYNTAX_H__ +#define __ARCANA_LISP_SYNTAX_H__ #include "object.h" diff --git a/src/tokens.h b/src/tokens.h index 4b9831d..380447d 100644 --- a/src/tokens.h +++ b/src/tokens.h @@ -1,5 +1,5 @@ -#ifndef __ARCANE_SCHEME_LISP_TOKENS_H__ -#define __ARCANE_SCHEME_LISP_TOKENS_H__ +#ifndef __ARCANA_LISP_TOKENS_H__ +#define __ARCANA_LISP_TOKENS_H__ #include #include diff --git a/tests/arcana.scm b/tests/arcana.scm new file mode 100644 index 0000000..be48388 --- /dev/null +++ b/tests/arcana.scm @@ -0,0 +1,31 @@ +(begin + (displayln "--- TEST: arcana/parse -----------------------------------------") + (displayln + (arcana/parse + (list + (cons 'TOKEN_ROUND_OPEN "(") + (cons 'TOKEN_IDENT "displayln") + (cons 'TOKEN_ROUND_OPEN "(") + (cons 'TOKEN_IDENT "+") + (cons 'TOKEN_NUM "123") + (cons 'TOKEN_NUM "456") + (cons 'TOKEN_ROUND_CLOSE ")") + (cons 'TOKEN_ROUND_CLOSE ")")))) + (newline) + (displayln "--- TEST: arcana/tokenize --------------------------------------") + (displayln (arcana/tokenize "(")) + (displayln (arcana/tokenize "#false")) + ;(displayln (arcana/tokenize "\"\"")) + ;(displayln (arcana/tokenize "\"qwe\"")) + (displayln (arcana/tokenize "(displayln (list 1))")) + (newline) + (displayln "--- TEST: arcana/typeof ----------------------------------------") + (displayln (arcana/typeof '())) + (displayln (arcana/typeof +)) + (displayln (arcana/typeof (cons 123 456))) + (displayln (arcana/typeof #false)) + ;(displayln (arcana/typeof #\n)) + (displayln (arcana/typeof 'foo)) + (displayln (arcana/typeof "foo")) + (displayln (arcana/typeof 123)) +) diff --git a/tests/arcane.txt b/tests/arcana.txt similarity index 61% rename from tests/arcane.txt rename to tests/arcana.txt index 3481f96..47d5a69 100644 --- a/tests/arcane.txt +++ b/tests/arcana.txt @@ -1,12 +1,12 @@ -"--- TEST: arcane/parse -----------------------------------------" +"--- TEST: arcana/parse -----------------------------------------" (displayln (+ 123 456)) -"--- TEST: arcane/tokenize --------------------------------------" +"--- TEST: arcana/tokenize --------------------------------------" ((TOKEN_ROUND_OPEN . "(")) ((TOKEN_TAG . "false")) ((TOKEN_ROUND_OPEN . "(") (TOKEN_IDENT . "displayln") (TOKEN_ROUND_OPEN . "(") (TOKEN_IDENT . "list") (TOKEN_NUM . "1") (TOKEN_ROUND_CLOSE . ")") (TOKEN_ROUND_CLOSE . ")")) -"--- TEST: arcane/typeof ----------------------------------------" +"--- TEST: arcana/typeof ----------------------------------------" null procedure pair diff --git a/tests/arcane.scm b/tests/arcane.scm deleted file mode 100644 index 088bd91..0000000 --- a/tests/arcane.scm +++ /dev/null @@ -1,31 +0,0 @@ -(begin - (displayln "--- TEST: arcane/parse -----------------------------------------") - (displayln - (arcane/parse - (list - (cons 'TOKEN_ROUND_OPEN "(") - (cons 'TOKEN_IDENT "displayln") - (cons 'TOKEN_ROUND_OPEN "(") - (cons 'TOKEN_IDENT "+") - (cons 'TOKEN_NUM "123") - (cons 'TOKEN_NUM "456") - (cons 'TOKEN_ROUND_CLOSE ")") - (cons 'TOKEN_ROUND_CLOSE ")")))) - (newline) - (displayln "--- TEST: arcane/tokenize --------------------------------------") - (displayln (arcane/tokenize "(")) - (displayln (arcane/tokenize "#false")) - ;(displayln (arcane/tokenize "\"\"")) - ;(displayln (arcane/tokenize "\"qwe\"")) - (displayln (arcane/tokenize "(displayln (list 1))")) - (newline) - (displayln "--- TEST: arcane/typeof ----------------------------------------") - (displayln (arcane/typeof '())) - (displayln (arcane/typeof +)) - (displayln (arcane/typeof (cons 123 456))) - (displayln (arcane/typeof #false)) - ;(displayln (arcane/typeof #\n)) - (displayln (arcane/typeof 'foo)) - (displayln (arcane/typeof "foo")) - (displayln (arcane/typeof 123)) -)