diff options
| author | bjculkin <bjculkin@mix.wvu.edu> | 2017-03-19 19:06:03 -0400 |
|---|---|---|
| committer | bjculkin <bjculkin@mix.wvu.edu> | 2017-03-19 19:09:35 -0400 |
| commit | 3099ab89d28ffabdd67f5bcd74efb050e061691c (patch) | |
| tree | 3523135690ead64a01cc98ce73b46ec2cf5c1913 /BJC-Utils2/src/examples/java/bjc | |
| parent | 31bdd87d4d3330bd2da8ada79e213e1c232f4183 (diff) | |
Fix subgroups.
This fixes subgroups, by mostly rewriting the way the delimiter works.
Diffstat (limited to 'BJC-Utils2/src/examples/java/bjc')
| -rw-r--r-- | BJC-Utils2/src/examples/java/bjc/utils/examples/DelimSplitterTest.java | 127 |
1 files changed, 93 insertions, 34 deletions
diff --git a/BJC-Utils2/src/examples/java/bjc/utils/examples/DelimSplitterTest.java b/BJC-Utils2/src/examples/java/bjc/utils/examples/DelimSplitterTest.java index 4cd939e..a127caa 100644 --- a/BJC-Utils2/src/examples/java/bjc/utils/examples/DelimSplitterTest.java +++ b/BJC-Utils2/src/examples/java/bjc/utils/examples/DelimSplitterTest.java @@ -1,16 +1,13 @@ package bjc.utils.examples; import bjc.utils.data.ITree; -import bjc.utils.data.TopDownTransformResult; -import bjc.utils.funcdata.bst.TreeLinearizationMethod; import bjc.utils.funcutils.StringUtils; +import bjc.utils.parserutils.DelimiterException; +import bjc.utils.parserutils.DelimiterGroup; import bjc.utils.parserutils.SequenceDelimiter; import bjc.utils.parserutils.StringDelimiter; import bjc.utils.parserutils.TokenSplitter; -import bjc.utils.parserutils.SequenceDelimiter.DelimiterException; -import bjc.utils.parserutils.SequenceDelimiter.DelimiterGroup; - import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; @@ -37,6 +34,8 @@ public class DelimSplitterTest { private Map<String, DelimiterGroup<String>> groups; + boolean verbose; + /* * Create a new tester. */ @@ -48,6 +47,8 @@ public class DelimSplitterTest { split = new TokenSplitter(); dlm = new StringDelimiter(); + + verbose = true; } private void loadMirrorDB() { @@ -133,42 +134,67 @@ public class DelimSplitterTest { break; case "splitter-compile": split.compile(); - System.out.println("Compiled splitter"); + if(verbose) { + System.out.println("Compiled splitter"); + } break; case "splitter-add": split.addDelimiter(argArray); - System.out.println("Added delimiters " + StringUtils.toEnglishList(argArray, true)); + if(verbose) { + System.out.println("Added delimiters " + StringUtils.toEnglishList(argArray, true)); + } break; case "splitter-addmulti": split.addMultiDelimiter(argArray); - System.out.println("Added multi-delimiters " + StringUtils.toEnglishList(argArray, true)); + if(verbose) { + System.out.println("Added multi-delimiters " + + StringUtils.toEnglishList(argArray, true)); + } break; case "splitter-addnon": split.addNonMatcher(argArray); - System.out.println("Added non-splitters " + StringUtils.toEnglishList(argArray, true)); + if(verbose) { + System.out.println("Added non-splitters " + + StringUtils.toEnglishList(argArray, true)); + } break; case "splitter-addmatch": for(String arg : argArray) { split.addDelimiter(arg, mirrored.get(arg)); } - System.out.println("Added matched delimiters " + StringUtils.toEnglishList(argArray, true)); + if(verbose) { + System.out.println("Added matched delimiters " + + StringUtils.toEnglishList(argArray, true)); + } break; case "splitter-debug": System.out.println(split.toString()); break; case "splitter-reset": split = new TokenSplitter(); - System.out.println("Reset splitter"); + if(verbose) { + System.out.println("Reset splitter"); + } break; case "delims-addopen": dlm.addOpener(argArray[0], argArray[1]); - System.out.printf("Added opener '%s' for group '%s'\n", argArray[0], argArray[1]); + if(verbose) { + System.out.printf("Added opener '%s' for group '%s'\n", argArray[0], argArray[1]); + } break; case "delims-addgroup": for(String arg : argArray) { dlm.addGroup(groups.get(arg)); } - System.out.println("Added groups " + StringUtils.toEnglishList(argArray, true)); + if(verbose) { + System.out.println("Added groups " + StringUtils.toEnglishList(argArray, true)); + } + break; + case "delims-setinitial": + dlm.setInitialGroup(groups.get(argArray[0])); + if(verbose) { + System.out.println("Set initial group"); + } break; case "delims-debug": System.out.println(dlm.toString()); @@ -178,13 +204,17 @@ public class DelimSplitterTest { break; case "delims-reset": dlm = new StringDelimiter(); - System.out.println("Reset delimiter"); + if(verbose) { + System.out.println("Reset delimiter"); + } break; case "delimgroups-new": for(String arg : argArray) { groups.put(arg, new DelimiterGroup<>(arg)); } - System.out.println("Created groups " + StringUtils.toEnglishList(argArray, true)); + if(verbose) { + System.out.println("Created groups " + StringUtils.toEnglishList(argArray, true)); + } break; case "delimgroups-edit": for(String arg : argArray) { @@ -199,7 +229,9 @@ public class DelimSplitterTest { case "delimgroups-reset": dlm = new StringDelimiter(); groups = new HashMap<>(); - System.out.println("Reset delimiter groups + delimiter"); + if(verbose) { + System.out.println("Reset delimiter groups + delimiter"); + } break; case "load-file": handleLoadFile(args); @@ -214,7 +246,13 @@ public class DelimSplitterTest { * Load script commands from a file. */ private void handleLoadFile(String args) { - try(FileInputStream fis = new FileInputStream(args)) { + String pth = args; + + if(args.startsWith("\"")) { + pth = args.substring(1, args.length() - 1); + } + + try(FileInputStream fis = new FileInputStream(pth)) { Scanner scn = new Scanner(fis); while(scn.hasNextLine()) { @@ -223,7 +261,9 @@ public class DelimSplitterTest { if(ln.equals("")) continue; if(ln.startsWith("#")) continue; - System.out.println("\nRead command '" + ln + "' from file\n"); + if(verbose) { + System.out.println("\nRead command '" + ln + "' from file\n"); + } handleCommand(ln, scn, false); } @@ -246,8 +286,9 @@ public class DelimSplitterTest { DelimiterGroup<String> group = groups.get(arg); - System.out.println("Editing group '" + arg + "'"); - + if(verbose) { + System.out.println("Editing group '" + arg + "'"); + } if(isInteractive) { System.out.println("Enter command (blank line to stop editing): "); } @@ -269,21 +310,31 @@ public class DelimSplitterTest { switch(command) { case "add-closing": group.addClosing(argArray); - System.out.println("Added closers " + StringUtils.toEnglishList(argArray, true)); + if(verbose) { + System.out.println("Added closers " + + StringUtils.toEnglishList(argArray, true)); + } break; case "add-tlexclude": group.addTopLevelForbid(argArray); - System.out.println("Added top-level exclusions " - + StringUtils.toEnglishList(argArray, true)); + if(verbose) { + System.out.println("Added top-level exclusions " + + StringUtils.toEnglishList(argArray, true)); + } break; case "add-exclude": group.addTopLevelForbid(argArray); - System.out.println( - "Added nested exclusions " + StringUtils.toEnglishList(argArray, true)); + if(verbose) { + System.out.println("Added nested exclusions " + + StringUtils.toEnglishList(argArray, true)); + } break; case "add-subgroup": - group.addSubgroup(argArray[0], Arrays.copyOfRange(argArray, 1, argArray.length)); - System.out.println("Added subgroups"); + group.addSubgroup(argArray[0], Integer.parseInt(argArray[1])); + if(verbose) { + System.out.println(String.format("Added subgroup %s with priority %s", + argArray[0], argArray[1])); + } break; case "debug": System.out.println(group.toString()); @@ -299,7 +350,9 @@ public class DelimSplitterTest { ln = scn.nextLine().trim(); } - System.out.println("Finished editing group '" + arg + "'"); + if(verbose) { + System.out.println("Finished editing group '" + arg + "'"); + } } private void handleDelim(String args) { @@ -354,24 +407,29 @@ public class DelimSplitterTest { } private void printDelimSeq(ITree<String> delim) { - System.out.println("Delimited tokens:\n" + delim.toString()); - System.out.print("Delimited expr:\n"); + System.out.println("Delimited tokens:\n" + delim.getChild(1).toString()); + System.out.print("Delimited expr: "); printDelimTree(delim); System.out.println(); + System.out.println(); + /* ITree<String> transform = delim.topDownTransform(this::pickNode, this::transformNode); - System.out.println("Transformed tree: " + transform); + System.out.println("Transformed tree:\n" + transform.getChild(1)); + System.out.println(); System.out.println(); - System.out.print("Transformed expr:\n"); + System.out.print("Transformed expr: "); printDelimTree(transform); + */ + System.out.println(); } private void printDelimTree(ITree<String> tree) { StringBuilder sb = new StringBuilder(); - intPrintDelimTree(tree, sb); + intPrintDelimTree(tree.getChild(1), sb); System.out.println(sb.toString().replaceAll("\\s+", " ")); } @@ -415,6 +473,7 @@ public class DelimSplitterTest { } } + /* private TopDownTransformResult pickNode(String node) { if(groups.containsKey(node) || node.equals("subgroup")) return TopDownTransformResult.PUSHDOWN; @@ -429,7 +488,7 @@ public class DelimSplitterTest { return tree; } - +*/ /** * Main method * |
