diff options
| author | Benjamin J. Culkin <bjculkin@mix.wvu.edu> | 2018-05-29 15:35:02 -0300 |
|---|---|---|
| committer | Benjamin J. Culkin <bjculkin@mix.wvu.edu> | 2018-05-29 15:35:02 -0300 |
| commit | 0faa5175b6f0de8835ed514615ac64135f406b29 (patch) | |
| tree | 6a1a5a9b01a1175b8ae2203418005f7bc625be9d /src/main/java/bjc/rgens/parser/RGrammars.java | |
| parent | 9356498bebab9342222cd87be669abae9d7ac3a2 (diff) | |
Move files out of folder
Diffstat (limited to 'src/main/java/bjc/rgens/parser/RGrammars.java')
| -rw-r--r-- | src/main/java/bjc/rgens/parser/RGrammars.java | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/src/main/java/bjc/rgens/parser/RGrammars.java b/src/main/java/bjc/rgens/parser/RGrammars.java new file mode 100644 index 0000000..f74a756 --- /dev/null +++ b/src/main/java/bjc/rgens/parser/RGrammars.java @@ -0,0 +1,67 @@ +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<String, String> env = new HashMap<>(); + env.put("create", "true"); + @SuppressWarnings("unused") + 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; + } + } + + /** + * Generate an exported rule. + * + * @param exportName + * The rule to generate. + * @return The generated rule + * @throws GrammarException + * If something went wrong. + */ + public static String generateExport(String exportName) throws GrammarException { + if (gramSet == null) + loadSet(); + + if (!gramSet.getExportedRules().contains(exportName)) { + throw new GrammarException(String.format("No exported rule named %s", exportName)); + } + + RGrammar gram = gramSet.getExportSource(exportName); + + String res = gram.generate(exportName); + if (exportName.contains("+")) + res = res.replaceAll("\\s+", ""); + + return res; + } +} |
