diff options
| author | Benjamin J. Culkin <bjculkin@mix.wvu.edu> | 2018-09-05 12:24:51 -0300 |
|---|---|---|
| committer | Benjamin J. Culkin <bjculkin@mix.wvu.edu> | 2018-09-05 12:24:51 -0300 |
| commit | ad699d027fd9a63d7942fb455e7cfa775f726c43 (patch) | |
| tree | 20a3aff7d7b985fb924fda421c2a758ccc013c74 /src/main/java/bjc/rgens | |
| parent | b11e685001d37f5d2be91e36184fee10987ba798 (diff) | |
Add grammar name pragma
Diffstat (limited to 'src/main/java/bjc/rgens')
| -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) { |
