summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rwxr-xr-xsrc/main/java/bjc/rgens/parser/RGrammarBuilder.java3
-rwxr-xr-xsrc/main/java/bjc/rgens/parser/RGrammarParser.java17
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) {