From 6aa15e30fa75211964428e386b4b6b0f2c66dbc5 Mon Sep 17 00:00:00 2001 From: student Date: Thu, 29 Mar 2018 11:38:02 -0400 Subject: Rename package --- .../src/main/java/bjc/rgens/parser/RGrammars.java | 55 ++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 RGens/src/main/java/bjc/rgens/parser/RGrammars.java (limited to 'RGens/src/main/java/bjc/rgens/parser/RGrammars.java') diff --git a/RGens/src/main/java/bjc/rgens/parser/RGrammars.java b/RGens/src/main/java/bjc/rgens/parser/RGrammars.java new file mode 100644 index 0000000..69cca0d --- /dev/null +++ b/RGens/src/main/java/bjc/rgens/parser/RGrammars.java @@ -0,0 +1,55 @@ +package bjc.rgens.parser; + +import java.io.IOException; +import java.net.URISyntaxException; +import java.net.URI; +import java.nio.file.FileSystem; +import java.nio.file.FileSystems; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.HashMap; +import java.util.Map; + +/** + * Get access to the included grammars. + * + * @author Ben Culkin + */ +public class RGrammars { + private static RGrammarSet gramSet; + + private static void loadSet() { + try { + URI rsc = RGrammarTest.class.getResource("/server-config-sample.cfg").toURI(); + + Map env = new HashMap<>(); + env.put("create", "true"); + FileSystem zipfs = FileSystems.newFileSystem(rsc, env); + + Path cfgPath = Paths.get(rsc); + + gramSet = RGrammarSet.fromConfigFile(cfgPath); + } catch (IOException | URISyntaxException ex) { + RuntimeException rtex = new RuntimeException("Could not load grammars"); + + rtex.initCause(ex); + + throw rtex; + } + } + + public static String generateExport(String exportName) throws GrammarException { + if(gramSet == null) loadSet(); + + if(!gramSet.getExportedRules().contains(exportName)) { + throw new GrammarException(String.format("No built-in rule named %s", exportName)); + } + + RGrammar gram = gramSet.getExportSource(exportName); + + String res = gram.generate(exportName); + if(exportName.contains("+")) res = res.replaceAll("\\s+", ""); + + return res; + } +} -- cgit v1.2.3