diff options
Diffstat (limited to 'src/main/java/bjc/rgens/parser/elements')
11 files changed, 36 insertions, 99 deletions
diff --git a/src/main/java/bjc/rgens/parser/elements/BlankCaseElement.java b/src/main/java/bjc/rgens/parser/elements/BlankCaseElement.java index 66ff310..7229e92 100755 --- a/src/main/java/bjc/rgens/parser/elements/BlankCaseElement.java +++ b/src/main/java/bjc/rgens/parser/elements/BlankCaseElement.java @@ -1,7 +1,5 @@ package bjc.rgens.parser.elements; -import bjc.rgens.parser.GenerationState; - public class BlankCaseElement extends LiteralCaseElement { public BlankCaseElement() { super(""); diff --git a/src/main/java/bjc/rgens/parser/elements/CaseElement.java b/src/main/java/bjc/rgens/parser/elements/CaseElement.java index fa398e7..6c3bd2e 100755 --- a/src/main/java/bjc/rgens/parser/elements/CaseElement.java +++ b/src/main/java/bjc/rgens/parser/elements/CaseElement.java @@ -1,13 +1,10 @@ package bjc.rgens.parser.elements; -import bjc.utils.funcutils.StringUtils; +import static bjc.rgens.parser.RGrammarLogging.trace; import bjc.rgens.parser.GenerationState; import bjc.rgens.parser.GrammarException; - -import java.util.Arrays; - -import static bjc.rgens.parser.RGrammarLogging.*; +import bjc.utils.ioutils.LevelSplitter; /** * A element in a rule case. @@ -85,7 +82,7 @@ public abstract class CaseElement { String specialBody = csepart.substring(1, csepart.length() - 1); if (specialBody.matches("\\S+:\\S=\\S+")) { - String[] parts = StringUtils.levelSplit(specialBody, "=").toArray(new String[0]); + String[] parts = LevelSplitter.def.levelSplit(specialBody, "=").toArray(new String[0]); if(parts.length != 2) { throw new GrammarException("Colon variables must have a name and a definition"); @@ -102,7 +99,7 @@ public abstract class CaseElement { return VariableDefCaseElement.parseVariable(varName, parts[1], op, true); } else if (specialBody.matches("\\S+:=\\S+")) { - String[] parts = StringUtils.levelSplit(specialBody, "=").toArray(new String[0]); + String[] parts = LevelSplitter.def.levelSplit(specialBody, "=").toArray(new String[0]); if(parts.length != 2) { throw new GrammarException("Colon variables must have a name and a definition"); @@ -114,7 +111,7 @@ public abstract class CaseElement { return VariableDefCaseElement.parseVariable(varName, parts[1], ' ', true); } else if (specialBody.matches("\\S+=\\S+")) { - String[] parts = StringUtils.levelSplit(specialBody, "=").toArray(new String[0]); + String[] parts = LevelSplitter.def.levelSplit(specialBody, "=").toArray(new String[0]); if(parts.length != 2) { throw new GrammarException("Variables must have a name and a definition"); } @@ -136,21 +133,14 @@ public abstract class CaseElement { return new RangeCaseElement(firstNum, secondNum); } else if(rawCase.contains("||")) { - String[] elms = StringUtils.levelSplit(rawCase, "||").toArray(new String[0]); + String[] elms = LevelSplitter.def.levelSplit(rawCase, "||").toArray(new String[0]); return new InlineRuleCaseElement(elms); } else if(rawCase.contains("|")) { throw new GrammarException("Inline rule using | found, they use || now"); - // String[] elms = StringUtils.levelSplit(rawCase, "|").toArray(new String[0]); + // String[] elms = LevelSplitter.def.levelSplit(rawCase, "|").toArray(new String[0]); // return new InlineRuleCaseElement(elms); - } else if (StringUtils.levelContains(rawCase, ".")) { - String[] parts = StringUtils.levelSplit(rawCase, ".").toArray(new String[0]); - - CaseElement base = createElement(parts[0]); - - parts = Arrays.copyOfRange(parts, 1, parts.length); - return new MethodCaseElement(base, parts); } else { return new RuleCaseElement(rawCase); } diff --git a/src/main/java/bjc/rgens/parser/elements/ExpVariableCaseElement.java b/src/main/java/bjc/rgens/parser/elements/ExpVariableCaseElement.java index c221f4a..03eebe3 100755 --- a/src/main/java/bjc/rgens/parser/elements/ExpVariableCaseElement.java +++ b/src/main/java/bjc/rgens/parser/elements/ExpVariableCaseElement.java @@ -1,13 +1,9 @@ package bjc.rgens.parser.elements; -import bjc.utils.data.IPair; - import bjc.rgens.parser.GenerationState; import bjc.rgens.parser.GrammarException; -import bjc.rgens.parser.RecurLimitException; import bjc.rgens.parser.RGrammar; import bjc.rgens.parser.Rule; -import bjc.rgens.parser.RuleCase; public class ExpVariableCaseElement extends VariableDefCaseElement { public ExpVariableCaseElement(String name, String def) { diff --git a/src/main/java/bjc/rgens/parser/elements/InlineRuleCaseElement.java b/src/main/java/bjc/rgens/parser/elements/InlineRuleCaseElement.java index 269cc4f..9385ded 100644 --- a/src/main/java/bjc/rgens/parser/elements/InlineRuleCaseElement.java +++ b/src/main/java/bjc/rgens/parser/elements/InlineRuleCaseElement.java @@ -3,11 +3,17 @@ package bjc.rgens.parser.elements; import bjc.rgens.parser.GenerationState; import bjc.rgens.parser.RGrammarParser; +import bjc.utils.data.IPair; +import bjc.utils.funcdata.IList; + + import bjc.utils.data.ITree; import bjc.utils.data.Tree; import bjc.utils.funcdata.FunctionalList; import bjc.utils.funcutils.StringUtils; + import bjc.utils.gen.WeightedRandom; +import bjc.utils.ioutils.LevelSplitter; import java.util.ArrayList; import java.util.List; @@ -27,8 +33,8 @@ public class InlineRuleCaseElement extends CaseElement { for(String part : parts) { String[] partArr; - if(StringUtils.levelContains(part, "|")) { - partArr = StringUtils.levelSplit(part, "||").toArray(new String[0]); + if(LevelSplitter.def.levelContains(part, "|")) { + partArr = LevelSplitter.def.levelSplit(part, "||").toArray(new String[0]); } else { partArr = new String[] {part}; } diff --git a/src/main/java/bjc/rgens/parser/elements/MethodCaseElement.java b/src/main/java/bjc/rgens/parser/elements/MethodCaseElement.java deleted file mode 100644 index 13f58e9..0000000 --- a/src/main/java/bjc/rgens/parser/elements/MethodCaseElement.java +++ /dev/null @@ -1,41 +0,0 @@ -package bjc.rgens.parser.elements; - -import bjc.rgens.parser.GenerationState; -import bjc.rgens.parser.GrammarException; -import bjc.rgens.parser.elements.CaseElement; -import bjc.rgens.parser.elements.methods.MethodElement; - -import java.util.List; -import java.util.LinkedList; - -public class MethodCaseElement extends CaseElement { - public CaseElement base; - - public List<MethodElement> methods; - - public MethodCaseElement(CaseElement base, String... rawMethods) { - this.base = base; - - // @TODO - // - // Implement this - } - - public MethodCaseElement(CaseElement base, List<MethodElement> rawMethods) { - this.base = base; - - methods = new LinkedList<>(); - - for(MethodElement method : rawMethods) { - methods.add(method); - } - } - - public void generate(GenerationState state) { - base.generate(state); - - for(MethodElement method : methods) { - method.call(state); - } - } -} diff --git a/src/main/java/bjc/rgens/parser/elements/RuleCaseElement.java b/src/main/java/bjc/rgens/parser/elements/RuleCaseElement.java index e42647c..1a2cf85 100755 --- a/src/main/java/bjc/rgens/parser/elements/RuleCaseElement.java +++ b/src/main/java/bjc/rgens/parser/elements/RuleCaseElement.java @@ -1,15 +1,12 @@ package bjc.rgens.parser.elements; -import bjc.utils.data.IPair; -import bjc.utils.data.Pair; - -import bjc.rgens.parser.*; -import bjc.rgens.parser.elements.vars.*; - -import java.util.ArrayList; import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; + +import bjc.rgens.parser.GenerationState; +import bjc.rgens.parser.GrammarException; +import bjc.rgens.parser.RGrammar; +import bjc.rgens.parser.Rule; +import bjc.rgens.parser.elements.vars.VariableElement; public class RuleCaseElement extends CaseElement { public List<VariableElement> elements; @@ -46,11 +43,13 @@ public class RuleCaseElement extends CaseElement { } } - protected void doGenerate(String actName, GenerationState state) { + protected void doGenerate(String acName, GenerationState state) { GenerationState newState = state.newBuf(); Rule rl; + String actName = acName; + if (actName.startsWith("[^")) { actName = "[" + actName.substring(2); diff --git a/src/main/java/bjc/rgens/parser/elements/RuleVariableCaseElement.java b/src/main/java/bjc/rgens/parser/elements/RuleVariableCaseElement.java index a7fdbec..923b56c 100644 --- a/src/main/java/bjc/rgens/parser/elements/RuleVariableCaseElement.java +++ b/src/main/java/bjc/rgens/parser/elements/RuleVariableCaseElement.java @@ -1,14 +1,10 @@ package bjc.rgens.parser.elements; -import bjc.utils.data.IPair; -import bjc.utils.data.Pair; +import static bjc.rgens.parser.RGrammarLogging.fine; -import bjc.rgens.parser.GrammarException; import bjc.rgens.parser.GenerationState; +import bjc.rgens.parser.GrammarException; import bjc.rgens.parser.Rule; -import bjc.rgens.parser.RGrammar; - -import static bjc.rgens.parser.RGrammarLogging.*; public class RuleVariableCaseElement extends VariableDefCaseElement { public final boolean exhaust; diff --git a/src/main/java/bjc/rgens/parser/elements/methods/MethodElement.java b/src/main/java/bjc/rgens/parser/elements/methods/MethodElement.java deleted file mode 100644 index 0e8f37c..0000000 --- a/src/main/java/bjc/rgens/parser/elements/methods/MethodElement.java +++ /dev/null @@ -1,7 +0,0 @@ -package bjc.rgens.parser.elements.methods; - -import bjc.rgens.parser.GenerationState; - -public interface MethodElement { - public void call(GenerationState state); -} diff --git a/src/main/java/bjc/rgens/parser/elements/vars/ARefVariableElement.java b/src/main/java/bjc/rgens/parser/elements/vars/ARefVariableElement.java index 17db660..1a04e50 100644 --- a/src/main/java/bjc/rgens/parser/elements/vars/ARefVariableElement.java +++ b/src/main/java/bjc/rgens/parser/elements/vars/ARefVariableElement.java @@ -1,9 +1,12 @@ package bjc.rgens.parser.elements.vars; import bjc.rgens.parser.GenerationState; -import bjc.rgens.parser.GrammarException; import bjc.rgens.parser.Rule; - +/** + * Reference to an array variable. + * @author bjculkin + * + */ public class ARefVariableElement extends VariableElement { public String value; diff --git a/src/main/java/bjc/rgens/parser/elements/vars/TRefVariableElement.java b/src/main/java/bjc/rgens/parser/elements/vars/TRefVariableElement.java index a33d78c..c753dfe 100644 --- a/src/main/java/bjc/rgens/parser/elements/vars/TRefVariableElement.java +++ b/src/main/java/bjc/rgens/parser/elements/vars/TRefVariableElement.java @@ -1,8 +1,6 @@ package bjc.rgens.parser.elements.vars; import bjc.rgens.parser.GenerationState; -import bjc.rgens.parser.GrammarException; -import bjc.rgens.parser.templates.GrammarTemplate; /* * @TODO diff --git a/src/main/java/bjc/rgens/parser/elements/vars/VariableElement.java b/src/main/java/bjc/rgens/parser/elements/vars/VariableElement.java index 77eb151..eb36af8 100644 --- a/src/main/java/bjc/rgens/parser/elements/vars/VariableElement.java +++ b/src/main/java/bjc/rgens/parser/elements/vars/VariableElement.java @@ -1,12 +1,11 @@ package bjc.rgens.parser.elements.vars; -import bjc.utils.funcutils.StringUtils; +import java.util.ArrayList; +import java.util.List; import bjc.rgens.parser.GenerationState; import bjc.rgens.parser.GrammarException; - -import java.util.ArrayList; -import java.util.List; +import bjc.utils.ioutils.LevelSplitter; public abstract class VariableElement { public boolean forbidSpaces; @@ -18,12 +17,12 @@ public abstract class VariableElement { public abstract void generate(GenerationState state); public static List<VariableElement> parseElementString(String varElm) { - boolean forbidSpaces = StringUtils.levelContains(varElm, "-", "+"); + boolean forbidSpaces = LevelSplitter.def.levelContains(varElm, "-", "+"); String[] parts; if(forbidSpaces) { - parts = StringUtils.levelSplit(varElm, true, "-", "+").toArray(new String[0]); + parts = LevelSplitter.def.levelSplit(varElm, true, "-", "+").toArray(new String[0]); } else { parts = new String[] { varElm }; } |
