diff options
Diffstat (limited to 'src/main/java')
| -rwxr-xr-x | src/main/java/bjc/rgens/parser/RGrammarParser.java | 14 | ||||
| -rw-r--r-- | src/main/java/bjc/rgens/parser/elements/InlineRuleCaseElement.java | 5 |
2 files changed, 10 insertions, 9 deletions
diff --git a/src/main/java/bjc/rgens/parser/RGrammarParser.java b/src/main/java/bjc/rgens/parser/RGrammarParser.java index a869179..a1fc0e9 100755 --- a/src/main/java/bjc/rgens/parser/RGrammarParser.java +++ b/src/main/java/bjc/rgens/parser/RGrammarParser.java @@ -202,12 +202,12 @@ public class RGrammarParser { try { RGrammarBuilder build = new RGrammarBuilder(); - reader.forEachBlock((block) -> { + for(Block block : reader) { if(DEBUG) System.err.printf("Handling top-level block (%s)\n", block); handleBlock(build, block.contents, 0, block.startLine); - }); + } if(LINES) System.err.printf("%d ", reader.getBlock().endLine); @@ -270,7 +270,7 @@ public class RGrammarParser { String dlm = String.format(TMPL_PRAGMA_BLOCK_DELIM, level); try (BlockReader pragmaReader = new SimpleBlockReader(dlm, new StringReader(block))) { try { - pragmaReader.forEachBlock((pragma) -> { + for(Block pragma : pragmaReader) { pragma.lineOffset = lineOffset; if(DEBUG) @@ -296,7 +296,7 @@ public class RGrammarParser { } handlePragma(pragmaBody, build, level, pragma.startLine + lineOffset); - }); + } } catch (GrammarException gex) { Block pragma = pragmaReader.getBlock(); String msg = String.format("Error in pragma: (%s)", pragma); @@ -352,12 +352,12 @@ public class RGrammarParser { String declContents = declBlock.contents; Rule rl = handleRuleDecl(build, declContents, lineOffset + declBlock.startLine); - ruleReader.forEachBlock((block) -> { + for(Block block : ruleReader) { /* Ignore comment lines. */ if(block.contents.trim().startsWith("#")) return; handleRuleCase(block.contents, build, rl, block.startLine + lineOffset); - }); + } } else { /* Rule with a declaration followed by a single case. */ handleRuleDecl(build, ruleBlock, lineOffset); @@ -387,7 +387,7 @@ public class RGrammarParser { declSep = declContents.indexOf(' '); if (declSep == -1) { - String msg = "A rule must be given at least one case in its declaration, and seperated from that case by \u2192"; + String msg = "A rule must be given at least one case in its declaration, and seperated from that case by \u2192 or ' '"; throw new GrammarException(msg); } diff --git a/src/main/java/bjc/rgens/parser/elements/InlineRuleCaseElement.java b/src/main/java/bjc/rgens/parser/elements/InlineRuleCaseElement.java index 12b6f14..917dd33 100644 --- a/src/main/java/bjc/rgens/parser/elements/InlineRuleCaseElement.java +++ b/src/main/java/bjc/rgens/parser/elements/InlineRuleCaseElement.java @@ -6,6 +6,7 @@ import bjc.rgens.parser.RGrammarParser; import bjc.utils.data.IPair; import bjc.utils.funcdata.FunctionalList; import bjc.utils.funcdata.IList; +import bjc.utils.funcutils.StringUtils; import bjc.utils.gen.WeightedRandom; public class InlineRuleCaseElement extends CaseElement { @@ -19,8 +20,8 @@ public class InlineRuleCaseElement extends CaseElement { for(String part : parts) { String[] partArr; - if(part.contains("|")) { - partArr = part.split("\\|"); + if(StringUtils.levelContains(part, "|")) { + partArr = StringUtils.levelSplit(part, "||").toArray(new String[0]); } else { partArr = new String[] {part}; } |
