1 package org.simantics.scl.compiler.parser.generator;
4 import java.io.FileInputStream;
5 import java.io.IOException;
7 import org.simantics.scl.compiler.parser.generator.compression.CompressedParseTable;
8 import org.simantics.scl.compiler.parser.generator.grammar.AnaGrammar;
9 import org.simantics.scl.compiler.parser.generator.java.GenerateEnum;
10 import org.simantics.scl.compiler.parser.generator.java.GenerateParser;
11 import org.simantics.scl.compiler.parser.generator.table.ParseTable;
12 import org.simantics.scl.compiler.parser.generator.table.ParseTableBuilder;
13 import org.simantics.scl.compiler.parser.grammar.Grammar;
14 import org.simantics.scl.compiler.parser.grammar.input.GrammarParserImpl;
16 public class ParserGenerator {
18 public static void createParser(String packageName, String exceptionName, File grammarFile) throws IOException {
19 // Read grammar and check it
20 FileInputStream inputStream = new FileInputStream(grammarFile);
21 Grammar grammar = GrammarParserImpl.read(inputStream);
25 AnaGrammar anaGrammar = new AnaGrammar(grammar);
26 ParseTable table = ParseTableBuilder.build(anaGrammar);
28 File directory = grammarFile.getParentFile();
29 String name = grammarFile.getName();
31 int p = name.lastIndexOf('.');
33 name = name.substring(0, p);
37 CompressedParseTable compressedTable = table.compress();
38 compressedTable.writeTo(new File(directory, name + "Parser.dat"));
42 String className = name + "Terminals";
43 GenerateEnum.generate(new File(directory, className + ".java"),
44 packageName, className,
45 anaGrammar.terminalNames);
48 String className = name + "Parser";
49 new GenerateParser(packageName, className, anaGrammar, exceptionName, compressedTable)
50 .generate(new File(directory, className + ".java"));