diff --git a/src/java/org/jastadd/relast/compiler/Compiler.java b/src/java/org/jastadd/relast/compiler/Compiler.java index 27f50ac2bad23c1ce3417adc90c4bf1e6acc6d55..a6f8a1dd7e2b09a209cbdf37b786e1a351ec06a5 100644 --- a/src/java/org/jastadd/relast/compiler/Compiler.java +++ b/src/java/org/jastadd/relast/compiler/Compiler.java @@ -20,6 +20,7 @@ import beaver.Parser; public class Compiler { protected ArrayList<Option<?>> options; protected FlagOption optionWriteToFile; + protected FlagOption optionPrintAST; protected CommandLine commandLine; public Compiler(String args[]) throws CommandLineException { @@ -37,7 +38,9 @@ public class Compiler { Program p = parseProgram(filename); if (!p.errors().isEmpty()) { - System.out.println(p.dumpTree()); + if (optionPrintAST.isSet()) { + System.out.println(p.dumpTree()); + } System.err.println("Errors:"); for (ErrorMessage e: p.errors()) { System.err.println(e); @@ -50,8 +53,9 @@ public class Compiler { String absPathExclExt = absPath.substring(0, absPath.lastIndexOf('.')); writeToFile(absPathExclExt + "Gen.ast", p.generateAbstractGrammar()); writeToFile(absPathExclExt + "Gen.jadd", p.generateAspect()); - } - else { + } else if (optionPrintAST.isSet()) { + System.out.println(p.dumpTree()); + } else { System.out.println(p.generateAbstractGrammar()); System.out.println(p.generateAspect()); } @@ -60,7 +64,7 @@ public class Compiler { protected void writeToFile(String filename, String str) { try { - PrintWriter writer = new PrintWriter(filename, "UTF-8"); + PrintWriter writer = new PrintWriter(filename); writer.print(str); writer.close(); } catch (Exception e) { @@ -70,7 +74,8 @@ public class Compiler { } protected void addOptions() { - optionWriteToFile = addOption(new FlagOption("file", "write output to file")); + optionWriteToFile = addOption(new FlagOption("file", "write output to files <filename>Gen.ast and <filename>Gen.jadd")); + optionPrintAST = addOption(new FlagOption("ast", "print AST")); } protected <OptionType extends Option<?>> OptionType addOption(OptionType option) { @@ -101,24 +106,19 @@ public class Compiler { System.err.println("Parse error in file " + file); System.err.println(e.getMessage()); System.exit(1); - } /*catch (ScannerError e) { - System.err.println("Scanner error in file " + file); - System.err.println(e.getMessage()); - System.exit(1); - }*/ + } return null; } protected void error(String message) { System.err.println("Error: " + message); + System.err.println(); + System.err.println("Usage: java -jar relast-compiler.jar <filename> [--option1] [--option2=value] ... "); + System.err.println("Options:"); + System.err.print(commandLine.printOptionHelp()); System.exit(1); } - private void showUsageAndExit() { - //System.out.println("Usage: java -jar bloqqi-compiler.jar [--option1] [--option2=value] ... <filename1> [filename2] [filename3] ..."); - //System.exit(1); - } - public static void main(String[] args) { try { new Compiler(args); diff --git a/test/Makefile b/test/Makefile deleted file mode 100644 index 4f66686a2a0c34dfd5f9b4b6adb1aac23204b146..0000000000000000000000000000000000000000 --- a/test/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -all: compile run check-idempotent -compile: - (cd .. && ant jar) - java -jar ../relast-compiler.jar All.relast --file - java -jar ../tools/jastadd2.jar --package=AST AllGen.ast AllGen.jadd Utils.jadd -run: - javac AST/*.java Test.java - java Test -check-idempotent: - java -jar ../relast-compiler.jar AllGen.ast --file - diff AllGen.ast AllGenGen.ast diff --git a/tests/Makefile b/tests/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..d65477dd3d9fa926ad44eb1e05ff4c19f3190c53 --- /dev/null +++ b/tests/Makefile @@ -0,0 +1,4 @@ +all: + cd ../ && ant jar + cd valid && make test + cd errors && make test \ No newline at end of file diff --git a/tests/errors/.gitignore b/tests/errors/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..e87afd97c3b381b83d7829594d887e153a4534e7 --- /dev/null +++ b/tests/errors/.gitignore @@ -0,0 +1 @@ +/*.out diff --git a/tests/errors/Errors.expected b/tests/errors/Errors.expected new file mode 100644 index 0000000000000000000000000000000000000000..93b0d7d9e8e17a2399c0e5fca93b2af03c0d43e0 --- /dev/null +++ b/tests/errors/Errors.expected @@ -0,0 +1,5 @@ +Errors: +Line 5, column 5: Role name missing for type 'A' +Line 6, column 15: Role name missing for type 'B' +Line 7, column 12: The target of a directed relation cannot have a role name +Line 8, column 13: The target of a directed relation may only have multiplicity 1 diff --git a/tests/errors/Errors.relast b/tests/errors/Errors.relast new file mode 100644 index 0000000000000000000000000000000000000000..c5bfd75f87b2ff697a558f0491211025d23e4ddc --- /dev/null +++ b/tests/errors/Errors.relast @@ -0,0 +1,8 @@ +Program ::= A* B*; +A; +B; + +rel A -> B; +rel A.bs* <-> B*; +rel A.b -> B.b; +rel A.b2 -> B*; diff --git a/tests/errors/Makefile b/tests/errors/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..75b5ba0c224beffe7c5952ccac8ee88359dfc8dd --- /dev/null +++ b/tests/errors/Makefile @@ -0,0 +1,7 @@ +all: build-jar test + +build-jar: + (cd ../../ && ant jar) +test: + java -jar ../../relast-compiler.jar Errors.relast 2> Errors.out || true + diff Errors.out Errors.expected \ No newline at end of file diff --git a/test/.gitignore b/tests/valid/.gitignore similarity index 100% rename from test/.gitignore rename to tests/valid/.gitignore diff --git a/test/All.relast b/tests/valid/All.relast similarity index 100% rename from test/All.relast rename to tests/valid/All.relast diff --git a/tests/valid/Makefile b/tests/valid/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..a18b8217c5d12b9783c31e2b6aebbea11f1d7aff --- /dev/null +++ b/tests/valid/Makefile @@ -0,0 +1,14 @@ +all: build-jar test +test: compile run check-idempotent + +build-jar: + (cd ../../ && ant jar) +compile: + java -jar ../../relast-compiler.jar All.relast --file + java -jar ../../tools/jastadd2.jar --package=AST AllGen.ast AllGen.jadd Utils.jadd +run: + javac AST/*.java Test.java + java Test +check-idempotent: + java -jar ../../relast-compiler.jar AllGen.ast --file + diff AllGen.ast AllGenGen.ast diff --git a/test/Test.java b/tests/valid/Test.java similarity index 100% rename from test/Test.java rename to tests/valid/Test.java diff --git a/test/Utils.jadd b/tests/valid/Utils.jadd similarity index 100% rename from test/Utils.jadd rename to tests/valid/Utils.jadd