diff options
Diffstat (limited to 'RGens/src/main')
| -rw-r--r-- | RGens/src/main/java/bjc/RGens/parser/.DS_Store | bin | 0 -> 6148 bytes | |||
| -rw-r--r-- | RGens/src/main/java/bjc/RGens/parser/GrammarReader.java | 54 | ||||
| -rw-r--r-- | RGens/src/main/java/bjc/RGens/parser/GrammarReaderApp.java | 29 | ||||
| -rw-r--r-- | RGens/src/main/java/bjc/RGens/parser/ReaderState.java | 4 |
4 files changed, 70 insertions, 17 deletions
diff --git a/RGens/src/main/java/bjc/RGens/parser/.DS_Store b/RGens/src/main/java/bjc/RGens/parser/.DS_Store Binary files differnew file mode 100644 index 0000000..76d2657 --- /dev/null +++ b/RGens/src/main/java/bjc/RGens/parser/.DS_Store diff --git a/RGens/src/main/java/bjc/RGens/parser/GrammarReader.java b/RGens/src/main/java/bjc/RGens/parser/GrammarReader.java index e83eede..f6aa383 100644 --- a/RGens/src/main/java/bjc/RGens/parser/GrammarReader.java +++ b/RGens/src/main/java/bjc/RGens/parser/GrammarReader.java @@ -93,32 +93,62 @@ public class GrammarReader { private static void initPragmas() { pragmaMap = new Hashtable<>(); + addSubgrammarPragmas(); + + pragmaMap.put("debug", GrammarReader::debugGrammar); + pragmaMap.put("import-rule", GrammarReader::importRule); + pragmaMap.put("initial-rule", GrammarReader::initialRule); pragmaMap.put("uniform", (stk, rs) -> rs.toggleUniformity()); - pragmaMap.put("subordinate", GrammarReader::subordinateGrammar); + + pragmaMap.put("multi-prefix-with", GrammarReader::multiPrefixRule); + pragmaMap.put("multi-suffix-with", GrammarReader::multiSuffixRule); + + pragmaMap.put("prefix-with", GrammarReader::prefixRule); + pragmaMap.put("suffix-with", GrammarReader::suffixRule); + } + + private static void multiPrefixRule(StringTokenizer stk, + ReaderState rs) { + + } + + private static void multiSuffixRule(StringTokenizer stk, + ReaderState rs) { + + } + + private static void addSubgrammarPragmas() { + pragmaMap.put("edit-sub-grammar", GrammarReader::editSubGrammar); + pragmaMap.put("edit-parent", (stk, rs) -> rs.popGrammar()); + + pragmaMap.put("load-sub-grammar", GrammarReader::loadSubGrammar); + + pragmaMap.put("new-sub-grammar", + (stk, rs) -> rs.pushGrammar(new WeightedGrammar<>())); + pragmaMap.put("promote", GrammarReader::promoteGrammar); + pragmaMap.put("remove-sub-grammar", GrammarReader::removeSubGrammar); pragmaMap.put("remove-rule", GrammarReader::removeRule); - pragmaMap.put("load-sub-grammar", GrammarReader::loadSubGrammar); - pragmaMap.put("new-sub-grammar", - (stk, rs) -> rs.pushGrammar(new WeightedGrammar<>())); - pragmaMap.put("edit-sub-grammar", GrammarReader::editSubGrammar); - pragmaMap.put("edit-parent", (stk, rs) -> rs.popGrammar()); + pragmaMap.put("save-sub-grammar", GrammarReader::saveGrammar); - pragmaMap.put("debug", GrammarReader::debugGrammar); - pragmaMap.put("prefix-with", GrammarReader::prefixRule); - pragmaMap.put("suffix-with", GrammarReader::suffixRule); - pragmaMap.put("import-rule", GrammarReader::importRule); + pragmaMap.put("subordinate", GrammarReader::subordinateGrammar); } + private static void initialRule(StringTokenizer stk, ReaderState rs) { + String rName = stk.nextToken(); + + rs.setInitialRule(rName); + } private static void importRule(StringTokenizer stk, ReaderState rs) { String ruleName = stk.nextToken(); String sgName = stk.nextToken(); - + rs.getRules().addGrammarAlias(sgName, ruleName); } - + private static void prefixRule(StringTokenizer stk, ReaderState rs) { String rName = stk.nextToken(); String prefixToken = stk.nextToken(); diff --git a/RGens/src/main/java/bjc/RGens/parser/GrammarReaderApp.java b/RGens/src/main/java/bjc/RGens/parser/GrammarReaderApp.java index 96f4ed7..5770d55 100644 --- a/RGens/src/main/java/bjc/RGens/parser/GrammarReaderApp.java +++ b/RGens/src/main/java/bjc/RGens/parser/GrammarReaderApp.java @@ -3,6 +3,8 @@ package bjc.RGens.parser; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; +import java.io.PrintStream; + import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; @@ -36,15 +38,32 @@ public class GrammarReaderApp { System.exit(1); } - String initRule = SimpleDialogs.getChoice(null, - "Pick a initial rule", - "Pick a initial rule to generate choices from", - wg.ruleNames().stream().sorted().toArray(String[]::new)); + String initRule = ""; + + if (!wg.hasInitRule()) { + initRule = SimpleDialogs.getChoice(null, "Pick a initial rule", + "Pick a initial rule to generate choices from", + wg.ruleNames().stream().sorted() + .toArray(String[]::new)); + } else { + initRule = wg.getInitRule(); + } int count = SimpleDialogs.getWhole(null, "Enter number of repititions", "Enter the number of items to generate from the rule"); + File outpFile = SimpleFileDialog.getSaveFile(null, + "Choose Grammar File"); + + PrintStream ps = null; + + try { + ps = new PrintStream(outpFile); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + for (int i = 0; i < count; i++) { String s = wg.genList(initRule, " ") .reduceAux(new StringBuilder(), @@ -53,7 +72,7 @@ public class GrammarReaderApp { t -> t.toString()) .replaceAll("\\s+", " "); - System.out.println(s); + ps.println(s); } } } diff --git a/RGens/src/main/java/bjc/RGens/parser/ReaderState.java b/RGens/src/main/java/bjc/RGens/parser/ReaderState.java index 1487822..3e25741 100644 --- a/RGens/src/main/java/bjc/RGens/parser/ReaderState.java +++ b/RGens/src/main/java/bjc/RGens/parser/ReaderState.java @@ -53,4 +53,8 @@ public class ReaderState { public void toggleUniformity() { isUniform = !isUniform; } + + public void setInitialRule(String rName) { + wg.peek().setInitRule(rName); + } } |
