Created
June 3, 2014 02:16
-
-
Save BenChung/940de1f94c6d5ef224c6 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
ParserBean host; | |
try (InputStream is = new FileInputStream(hostGrammar)) { | |
host = new CupSkinParser().parse(new InputStreamReader(is), hostGrammar.getName()); | |
} catch (Exception e) { | |
throw new BuildException(e); | |
} | |
ParserBean extension; | |
try (InputStream is = new FileInputStream(extensionGrammar)) { | |
ArrayList<Pair<String,Reader>> files = new ArrayList<>(); | |
files.add(new Pair<String, Reader>(extensionGrammar.getName(), new InputStreamReader(is))); | |
XMLSkinParser xmlSkinParser = new XMLSkinParser(files, | |
new CompilerLogger(new PrintCompilerLogHandler(new PrintStream(new OutputStream() { | |
public void write(int b) { | |
//Nothing - suppress all messages | |
} | |
})))); | |
xmlSkinParser.parse(); | |
Field parserField = xmlSkinParser.getClass().getDeclaredField("currentParser"); | |
parserField.setAccessible(true); | |
extension = (ParserBean)parserField.get(xmlSkinParser); | |
} catch (Exception e) { | |
throw new BuildException(e); | |
} | |
try { | |
CopperElementName grammarName = CopperElementName.newName("_" + hostGrammarName); | |
((ExtendedParserBean)extension).setHostGrammar(host.getGrammar(grammarName)); | |
Field grammarField = extension.getClass().getSuperclass().getDeclaredField("grammars"); | |
grammarField.setAccessible(true); | |
Hashtable<CopperElementName,Grammar> grammars = | |
(Hashtable<CopperElementName, Grammar>) grammarField.get(extension); | |
grammars.put(grammarName,host.getGrammar(grammarName)); | |
} catch (Exception e) { | |
throw new BuildException(e); | |
} | |
try { | |
CompilerLogger logger = new CompilerLogger(new PrintCompilerLogHandler(System.out)); | |
ParserSpecProcessor.normalizeParser(extension, logger); | |
} catch (CopperException e) { | |
throw new BuildException(e); | |
} | |
ParserCompilerParameters pcp = new ParserCompilerParameters(); | |
ParserCompiler.compile(extension, pcp); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment