/* * Copyright 2013 Guidewire Software, Inc. */ package gw.internal.gosu.parser.java; import gw.internal.ext.org.antlr.runtime.ANTLRFileStream; import gw.internal.ext.org.antlr.runtime.RecognitionException; import gw.internal.ext.org.antlr.runtime.TokenRewriteStream; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.LineNumberReader; public class GrammarProcessor { public static final String LEXER_SECTION = "Lexer Section"; public static void main(String args[]) throws Exception { transform( "C:\\depot\\eng\\emerald\\pl\\ready\\active\\studio\\platform\\gosu-core\\src\\gw\\internal\\gosu\\parser\\java\\Java-raw.g", "C:\\depot\\eng\\emerald\\pl\\ready\\active\\studio\\platform\\gosu-core\\src\\gw\\internal\\gosu\\parser\\java\\Java.g"); } public static void transform(String inputFile, String outputFile) throws IOException, RecognitionException { GrammarProcessorLexer lex = new GrammarProcessorLexer(new ANTLRFileStream(inputFile)); TokenRewriteStream tokens = new TokenRewriteStream(lex); GrammarProcessorParser parser = new GrammarProcessorParser(tokens); parser.grammarDef(); String oldText = readFile(inputFile); int index = oldText.indexOf(LEXER_SECTION); oldText = oldText.substring(index); String newText = tokens.toString(); index = newText.indexOf(LEXER_SECTION); if (index == -1) { System.err.println("Lexer section not found"); return; } newText = newText.substring(0, index); writeFile(outputFile, newText + oldText); } private static void writeFile(String outputFile, String newText) throws IOException { FileWriter writer = new FileWriter(outputFile); writer.write(newText); writer.close(); } private static String readFile(String inputFile) { StringBuilder buf = new StringBuilder(); try { LineNumberReader r = new LineNumberReader(new FileReader(inputFile)); String line; while ((line = r.readLine()) != null) { buf.append(line).append('\n'); } r.close(); } catch (IOException e) { throw new RuntimeException("Cannot read input file.", e); } return buf.toString(); } }