--- /dev/null
+package org.simantics.scl.compiler.parser.generator;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+
+import org.simantics.scl.compiler.parser.generator.compression.CompressedParseTable;
+import org.simantics.scl.compiler.parser.generator.grammar.AnaGrammar;
+import org.simantics.scl.compiler.parser.generator.java.GenerateEnum;
+import org.simantics.scl.compiler.parser.generator.java.GenerateParser;
+import org.simantics.scl.compiler.parser.generator.table.ParseTable;
+import org.simantics.scl.compiler.parser.generator.table.ParseTableBuilder;
+import org.simantics.scl.compiler.parser.grammar.Grammar;
+import org.simantics.scl.compiler.parser.grammar.input.GrammarParserImpl;
+
+public class ParserGenerator {
+
+ public static void createParser(String packageName, String exceptionName, File grammarFile) throws IOException {
+ // Read grammar and check it
+ FileInputStream inputStream = new FileInputStream(grammarFile);
+ Grammar grammar = GrammarParserImpl.read(inputStream);
+ inputStream.close();
+ grammar.check();
+
+ AnaGrammar anaGrammar = new AnaGrammar(grammar);
+ ParseTable table = ParseTableBuilder.build(anaGrammar);
+
+ File directory = grammarFile.getParentFile();
+ String name = grammarFile.getName();
+ {
+ int p = name.lastIndexOf('.');
+ if(p > 0)
+ name = name.substring(0, p);
+ }
+
+ // Write parse table
+ CompressedParseTable compressedTable = table.compress();
+ compressedTable.writeTo(new File(directory, name + "Parser.dat"));
+
+ // Write classes
+ {
+ String className = name + "Terminals";
+ GenerateEnum.generate(new File(directory, className + ".java"),
+ packageName, className,
+ anaGrammar.terminalNames);
+ }
+ {
+ String className = name + "Parser";
+ new GenerateParser(packageName, className, anaGrammar, exceptionName, compressedTable)
+ .generate(new File(directory, className + ".java"));
+ }
+ }
+
+}