From 52186de3a72f8207c2b7f78aa236d7865dd35fae Mon Sep 17 00:00:00 2001 From: hellerve Date: Sun, 3 Sep 2017 22:57:21 +0200 Subject: [PATCH] initial --- .gitignore | 1 + Makefile | 16 ++++++++++++++++ README.md | 3 +++ main.c | 34 ++++++++++++++++++++++++++++++++++ src/parser.c | 5 +++++ src/parser.h | 12 ++++++++++++ 6 files changed, 71 insertions(+) create mode 100644 .gitignore create mode 100644 Makefile create mode 100644 README.md create mode 100644 main.c create mode 100644 src/parser.c create mode 100644 src/parser.h diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e660fd9 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +bin/ diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..2b5daaa --- /dev/null +++ b/Makefile @@ -0,0 +1,16 @@ +TARGET=sc +BUILDDIR=bin/ +PREFIX=/usr/local/bin/ +SOURCES=$(wildcard src/*.c) +MAIN=main.c +override CFLAGS+=-Werror -Wall -g -fPIC -O2 -DNDEBUG -ftrapv -Wfloat-equal -Wundef -Wwrite-strings -Wuninitialized -pedantic -std=c11 + +all: main.c + mkdir -p $(BUILDDIR) + $(CC) $(MAIN) $(SOURCES) -o $(BUILDDIR)$(TARGET) $(CFLAGS) $(LDFLAGS) + +install: all + install $(BUILDDIR)$(TARGET) $(PREFIX)$(TARGET) + +uninstall: + rm -rf $(PREFIX)$(TARGET) diff --git a/README.md b/README.md new file mode 100644 index 0000000..45f92cb --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# sc + +A simple Scheme to C compiler, in C. diff --git a/main.c b/main.c new file mode 100644 index 0000000..588f721 --- /dev/null +++ b/main.c @@ -0,0 +1,34 @@ +#include + +#include "src/parser.h" + +int main(int argc, char** argv) { + char* inp; + long size; + + if (argc != 2) { + printf("usage: %s FILE\n", argv[0]); + return 1; + } + + FILE* f = fopen(argv[1], "r"); + + if (!f) { + puts("Error while opening the file."); + return 1; + } + + fseek(f, 0, SEEK_END); + size = ftell(f); + fseek(f, 0, SEEK_SET); + + inp = malloc(size+1); + fread(inp, size, 1, f); + fclose(f); + + inp[size] = '\0'; + + printf("%p\n", (void*) parse(inp)); + + return 0; +} diff --git a/src/parser.c b/src/parser.c new file mode 100644 index 0000000..b09620b --- /dev/null +++ b/src/parser.c @@ -0,0 +1,5 @@ +#include "parser.h" + +sc_ast* parse(char* input) { + return NULL; +} diff --git a/src/parser.h b/src/parser.h new file mode 100644 index 0000000..e7c13dd --- /dev/null +++ b/src/parser.h @@ -0,0 +1,12 @@ +#include + +typedef struct sc_ast { + short tag; + char* value; + + int n_children; + struct sc_ast** children; +} sc_ast; + + +sc_ast* parse(char*);