private void visit2(P_Path2 path2, String sep, boolean isSeq) { if ( needParens ) out.print("(") ; visitPath(path2.getLeft()) ; out.print(sep) ; // Don't need parens if same as before. if ( isSeq ) { // Make / and ^ chains look nice if ( path2.getRight() instanceof P_Seq ) visitPath(path2.getRight(), needParens) ; else visitPath(path2.getRight(), true) ; } else visitPath(path2.getRight(), true) ; if ( needParens ) out.print(")") ; }
private void visit2(P_Path2 path2, String sep, boolean isSeq) { if ( needParens ) out.print("(") ; visitPath(path2.getLeft()) ; out.print(sep) ; // Don't need parens if same as before. if ( isSeq ) { // Make / and ^ chains look nice if ( path2.getRight() instanceof P_Seq ) visitPath(path2.getRight(), needParens) ; else visitPath(path2.getRight(), true) ; } else visitPath(path2.getRight(), true) ; if ( needParens ) out.print(")") ; }
public void visit(P_ZeroOrMore path) { printPathMod("*", path.getSubPath()) ; }
private void visitPath(Path path) { visitPath(path, true) ; }
private void visitPath(Path path) { visitPath(path, true) ; }
public void visit(P_OneOrMore path) { printPathMod("+", path.getSubPath()) ; }
@Override public void visit(P_ZeroOrMoreN path) { printPathMod("{*}", path.getSubPath()) ; }
@Override public void visit(P_ZeroOrMore1 path) { printPathMod("*", path.getSubPath()) ; }
public void visit(P_ZeroOrOne path) { printPathMod("?", path.getSubPath()) ; }
@Override public void visit(P_OneOrMoreN path) { printPathMod("{+}", path.getSubPath()) ; }
public void visit(P_Link pathNode) { output(pathNode.getNode()) ; }
@Override public void visit(P_OneOrMore1 path) { printPathMod("+", path.getSubPath()) ; }
@Override public void visit(P_ZeroOrOne path) { printPathMod("?", path.getSubPath()) ; }
public void visit(P_Seq pathSeq) { visit2(pathSeq, "/", false) ; }
public void visit(P_Alt pathAlt) { visit2(pathAlt, "|", true) ; }
public static String asString(Path path, Prologue prologue) { IndentedLineBuffer buff = new IndentedLineBuffer() ; PathWriterWorker w = new PathWriterWorker(buff, prologue) ; path.visit(w) ; w.out.flush(); return buff.asString() ; }
@Override public void visit(P_Seq pathSeq) { visit2(pathSeq, "/", false) ; }
@Override public void visit(P_Alt pathAlt) { visit2(pathAlt, "|", true) ; }