summaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'src/main')
-rwxr-xr-xsrc/main/java/bjc/rgens/parser/RGrammar.java2
-rwxr-xr-xsrc/main/java/bjc/rgens/parser/RGrammarParser.java2
-rwxr-xr-xsrc/main/java/bjc/rgens/parser/Rule.java5
-rwxr-xr-xsrc/main/java/bjc/rgens/parser/RuleCase.java8
-rwxr-xr-xsrc/main/java/bjc/rgens/parser/elements/CaseElement.java4
-rwxr-xr-xsrc/main/java/bjc/rgens/parser/elements/ExpVariableCaseElement.java2
-rwxr-xr-xsrc/main/java/bjc/rgens/parser/elements/RuleCaseElement.java4
7 files changed, 20 insertions, 7 deletions
diff --git a/src/main/java/bjc/rgens/parser/RGrammar.java b/src/main/java/bjc/rgens/parser/RGrammar.java
index 1d33dfe..bd289e9 100755
--- a/src/main/java/bjc/rgens/parser/RGrammar.java
+++ b/src/main/java/bjc/rgens/parser/RGrammar.java
@@ -159,7 +159,7 @@ public class RGrammar {
if(rl.doRecur()) {
RuleCase start = rules.get(fromRule).getCase(state.rnd);
- System.err.printf("\tFINE: Generating case %d (from %s)\n", start.serial, fromRule);
+ System.err.printf("\tFINE: Generating %s (from %s)\n", start, fromRule);
generateCase(start, state);
diff --git a/src/main/java/bjc/rgens/parser/RGrammarParser.java b/src/main/java/bjc/rgens/parser/RGrammarParser.java
index ecca7ca..c807f5f 100755
--- a/src/main/java/bjc/rgens/parser/RGrammarParser.java
+++ b/src/main/java/bjc/rgens/parser/RGrammarParser.java
@@ -493,6 +493,8 @@ public class RGrammarParser {
serialUpper = Integer.parseInt(partToAdd.substring(partToAdd.lastIndexOf(".") + 1, partToAdd.length() - 1));
doSerial = true;
+ } else if(partToAdd.matches("\\<[^\\>]+\\>")) {
+ throw new GrammarException("Unknown parser meta-rule " + partToAdd);
} else {
CaseElement elm = CaseElement.createElement(partToAdd);
diff --git a/src/main/java/bjc/rgens/parser/Rule.java b/src/main/java/bjc/rgens/parser/Rule.java
index d0e5ec9..3e7d884 100755
--- a/src/main/java/bjc/rgens/parser/Rule.java
+++ b/src/main/java/bjc/rgens/parser/Rule.java
@@ -38,6 +38,7 @@ public class Rule {
private final static Random BASE = new Random();
+ private int serial = 1;
/**
* Create a new grammar rule.
*
@@ -83,6 +84,8 @@ public class Rule {
}
cse.belongsTo = name;
+ cse.debugName = String.format("%s-%d", name, serial);
+ serial += 1;
cases.addProbability(weight, cse);
}
@@ -141,6 +144,8 @@ public class Rule {
for(IPair<Integer, RuleCase> cse : cases) {
RuleCase cs = cse.getRight();
cs.belongsTo = name;
+ cs.debugName = String.format("%s-%d", name, serial);
+ serial += 1;
this.cases.addProbability(cse.getLeft(), cs);
}
diff --git a/src/main/java/bjc/rgens/parser/RuleCase.java b/src/main/java/bjc/rgens/parser/RuleCase.java
index 3581d54..3481f37 100755
--- a/src/main/java/bjc/rgens/parser/RuleCase.java
+++ b/src/main/java/bjc/rgens/parser/RuleCase.java
@@ -14,6 +14,8 @@ import bjc.utils.funcdata.IList;
* @author EVE
*/
public abstract class RuleCase {
+ public String debugName;
+
public final int serial;
private static int nextSerial = 0;
@@ -99,7 +101,11 @@ public abstract class RuleCase {
}
public String toString() {
- return String.format("Case %d of %s", hashCode(), belongsTo);
+ if(debugName != null) {
+ return String.format("Case %d (%s) of %s", serial, debugName, belongsTo);
+ } else {
+ return String.format("Case %d (%s-%d) of %s", serial, belongsTo, serial, belongsTo);
+ }
}
}
diff --git a/src/main/java/bjc/rgens/parser/elements/CaseElement.java b/src/main/java/bjc/rgens/parser/elements/CaseElement.java
index 8f3a8d4..103c00a 100755
--- a/src/main/java/bjc/rgens/parser/elements/CaseElement.java
+++ b/src/main/java/bjc/rgens/parser/elements/CaseElement.java
@@ -87,7 +87,7 @@ public abstract class CaseElement {
//System.out.printf("\t\tTRACE: special body is '%s'\n", specialBody);
- if (specialBody.matches("\\S+:=\\S+")) {
+ if (specialBody.matches("\\$\\S+:=\\S+")) {
/* Handle expanding variable definitions. */
String[] parts = specialBody.split(":=");
@@ -104,7 +104,7 @@ public abstract class CaseElement {
* valid rule name, since it gets used as one.
*/
return new ExpVariableCaseElement(parts[0], parts[1]);
- } else if (specialBody.matches("\\S+=\\S+")) {
+ } else if (specialBody.matches("\\$\\S+=\\S+")) {
/* Handle regular variable definitions. */
String[] parts = specialBody.split("=");
diff --git a/src/main/java/bjc/rgens/parser/elements/ExpVariableCaseElement.java b/src/main/java/bjc/rgens/parser/elements/ExpVariableCaseElement.java
index 5c66e9f..58c5479 100755
--- a/src/main/java/bjc/rgens/parser/elements/ExpVariableCaseElement.java
+++ b/src/main/java/bjc/rgens/parser/elements/ExpVariableCaseElement.java
@@ -21,7 +21,7 @@ public class ExpVariableCaseElement extends VariableCaseElement {
if(rl.doRecur()) {
RuleCase destCase = state.rules.get(varDef).getCase();
- System.err.printf("\tFINE: Generating case %d (from %s)\n", destCase.serial, varDef);
+ System.err.printf("\tFINE: Generating %s (from %s)\n", destCase, varDef);
state.gram.generateCase(destCase, newState);
diff --git a/src/main/java/bjc/rgens/parser/elements/RuleCaseElement.java b/src/main/java/bjc/rgens/parser/elements/RuleCaseElement.java
index 7bab6bf..66c0296 100755
--- a/src/main/java/bjc/rgens/parser/elements/RuleCaseElement.java
+++ b/src/main/java/bjc/rgens/parser/elements/RuleCaseElement.java
@@ -31,13 +31,13 @@ public abstract class RuleCaseElement extends StringCaseElement {
newState.swapGrammar(dst);
/* :Postprocessing */
- newState.contents = new StringBuilder(dst.generate(actName, state.rnd, state.vars));
+ newState.contents = new StringBuilder(dst.generate(actName, state.rnd, state.vars, state.rlVars));
} else if (state.rules.containsKey(actName)) {
Rule rl = state.rules.get(actName);
if(rl.doRecur()) {
RuleCase cse = rl.getCase(state.rnd);
- System.err.printf("\tFINE: Generating case %d (from %s)\n", cse.serial, actName);
+ System.err.printf("\tFINE: Generating %s (from %s)\n", cse, actName);
state.gram.generateCase(cse, newState);