diff options
Diffstat (limited to 'src/main/java/bjc/rgens/parser')
| -rwxr-xr-x | src/main/java/bjc/rgens/parser/RGrammarBuilder.java | 3 | ||||
| -rwxr-xr-x | src/main/java/bjc/rgens/parser/RGrammarParser.java | 17 |
2 files changed, 20 insertions, 0 deletions
diff --git a/src/main/java/bjc/rgens/parser/RGrammarBuilder.java b/src/main/java/bjc/rgens/parser/RGrammarBuilder.java index 8939b03..534d5ec 100755 --- a/src/main/java/bjc/rgens/parser/RGrammarBuilder.java +++ b/src/main/java/bjc/rgens/parser/RGrammarBuilder.java @@ -31,6 +31,8 @@ public class RGrammarBuilder { private Set<String> exportedRules; /* The current initial rule. */ private String initialRule; + /* The current grammar name. */ + public String name; /** Create a new randomized grammar builder. */ public RGrammarBuilder() { @@ -73,6 +75,7 @@ public class RGrammarBuilder { */ public RGrammar toRGrammar() { RGrammar grammar = new RGrammar(rules); + grammar.name = name; if(initialRule != null) { if(!rules.containsKey(initialRule)) { diff --git a/src/main/java/bjc/rgens/parser/RGrammarParser.java b/src/main/java/bjc/rgens/parser/RGrammarParser.java index bea2038..aae5c4a 100755 --- a/src/main/java/bjc/rgens/parser/RGrammarParser.java +++ b/src/main/java/bjc/rgens/parser/RGrammarParser.java @@ -70,6 +70,17 @@ public class RGrammarParser { build.setInitialRule(bits.get(0)); }); + pragmas.put("grammar-name", (body, build, level) -> { + List<String> bits = StringUtils.levelSplit(body, " "); + + if (bits.size() != 1) { + String msg = "Must specify grammar name"; + throw new GrammarException(msg); + } + + build.name = bits.get(0); + }); + pragmas.put("despace-rule", (body, build, level) -> { List<String> bits = StringUtils.levelSplit(body, " "); @@ -117,6 +128,7 @@ public class RGrammarParser { build.setWeight(parts.get(0)); }); + pragmas.put("enable-descent", (body, build, level) -> { List<String> parts = StringUtils.levelSplit(body, " "); @@ -132,6 +144,11 @@ public class RGrammarParser { }); pragmas.put("enable-binomial", (body, build, level) -> { + // @NOTE 9/4/18 + // + // This can be kind of hard to read right off. Is there + // a format to put stuff in that looks better and is + // more readable? List<String> parts = StringUtils.levelSplit(body, " "); if(parts.size() != 4) { |
