commit 35288b2ca7348ce0f874fe09db0e8044609bdad8 Author: Michael Zhang Date: Sat Oct 31 23:04:29 2020 -0500 initial diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..649a6ef --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +*.i +*.c +*.xml +ableC.jar diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..1796a11 --- /dev/null +++ b/Makefile @@ -0,0 +1,33 @@ +ABLEC_BASE ?= ~/Projects/melt-umn/ableC +EXTS_BASE ?= ~/Projects/melt-umn/extensions + +ABLEC_JAR = ableC.jar +ARTIFACT = artifact + +GRAMMAR_DIRS = $(ABLEC_BASE)/grammars $(wildcard $(EXTS_BASE)/*/grammars) +GRAMMAR_SOURCES = $(shell find $(GRAMMAR_DIRS) -name *.sv -print0 | xargs -0) + +XC_INCLUDE_DIRS = $(wildcard $(EXTS_BASE)/*/include) +override XCFLAGS += $(addprefix -I,$(XC_INCLUDE_DIRS)) + +override SVFLAGS += $(addprefix -I ,$(GRAMMAR_DIRS)) + +all: multiclip + +$(ABLEC_JAR): $(GRAMMAR_SOURCES) + touch $(wildcard $(ARTIFACT)/*.sv) + silver-ableC -o $@ $(SVFLAGS) $(ARTIFACT) + +multiclip: main.c + gcc -o $@ -lgc $< + +main.c: main.xc $(ABLEC_JAR) + java -jar $(ABLEC_JAR) $< -o $@ $(XCFLAGS) + +clean: + rm -f multiclip + rm -f *.gen_cpp + rm -f *.c + rm -f *.xml + +.PHONY: all clean diff --git a/artifact/Artifact.sv b/artifact/Artifact.sv new file mode 100644 index 0000000..57ba97f --- /dev/null +++ b/artifact/Artifact.sv @@ -0,0 +1,23 @@ +grammar artifact; + +{- This Silver specification does litte more than list the desired + extensions, albeit in a somewhat stylized way. + + Files like this can easily be generated automatically from a simple + list of the desired extensions. + -} + +import edu:umn:cs:melt:ableC:concretesyntax as cst; +import edu:umn:cs:melt:ableC:drivers:compile; + + +parser extendedParser :: cst:Root { + edu:umn:cs:melt:ableC:concretesyntax; + edu:umn:cs:melt:exts:ableC:string; +} + +function main +IOVal ::= args::[String] io_in::IO +{ + return driver(args, io_in, extendedParser); +} diff --git a/main.xc b/main.xc new file mode 100644 index 0000000..b1fb50e --- /dev/null +++ b/main.xc @@ -0,0 +1,12 @@ +#include + +#include + +int main(int argc, char** argv) { + string a; + + a = "abc"; + printf("a: %s\n", a.text); +} + +// vim: set ft=c :