private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException { patternStr = (String)ois.readObject(); patternExpr = (PatternExpr) ois.readObject(); //this.patternStr = patternStr; //this.patternExpr = nodeSequencePattern; action = (SequenceMatchAction) ois.readObject(); patternExpr = new GroupPatternExpr(patternExpr, true); patternExpr = patternExpr.optimize(); this.totalGroups = patternExpr.assignGroupIds(0); Frag f = patternExpr.build(); f.connect(MATCH_STATE); this.root = f.start; varGroupBindings = new VarGroupBindings(totalGroups+1); patternExpr.updateBindings(varGroupBindings); }
public SequencePattern.PatternExpr getSequencePatternExpr(String name, boolean copy) { Object obj = variables.get(name); if (obj != null) { if (obj instanceof SequencePattern) { SequencePattern seqPattern = (SequencePattern) obj; return seqPattern.getPatternExpr(); } else if (obj instanceof SequencePattern.PatternExpr) { SequencePattern.PatternExpr pe = (SequencePattern.PatternExpr) obj; return (copy)? pe.copy():pe; } else if (obj instanceof NodePattern) { return new SequencePattern.NodePatternExpr( (NodePattern) obj); } else if (obj instanceof String) { try { return parser.parseSequence(this, (String) obj); } catch (Exception pex) { throw new RuntimeException("Error parsing " + obj + " to sequence pattern", pex); } } else { throw new Error("Invalid sequence pattern variable class: " + obj.getClass()); } } return null; }
public <T2> SequencePattern<T2> transform(NodePatternTransformer<T,T2> transformer) { if (action != null) { throw new UnsupportedOperationException("transform on actions not yet implemented"); } SequencePattern.PatternExpr transformedPattern = this.patternExpr.transform(transformer); // TODO: Make string unique by indicating this pattern was transformed return new SequencePattern<>(this.patternStr, transformedPattern, null); }
@Override protected Frag build() { Frag frag = new Frag(); frag.start = new State(); // Create NFA fragment that // have one starting state that branches out to NFAs created by the children expressions // ---> pattern 1 ---> // | // ---> pattern 2 ---> // ... for (PatternExpr pattern : patterns) { // Build child NFA Frag f = pattern.build(); if (pattern.value() != null) { // Add value state to child NFA f.connect(new ValueState(pattern.value())); } // Add child NFA to next states of fragment start frag.start.add(f.start); // Add child NFA out (unlinked) states to out (unlinked) states of this fragment frag.add(f.out); } frag.start.markOptional(true); return frag; }
@Override protected Frag build() { Frag frag = new Frag(); frag.start = new State(); // Create NFA fragment that // have one starting state that branches out to NFAs created by the children expressions // ---> pattern 1 ---> // | // ---> pattern 2 ---> // ... for (PatternExpr pattern : patterns) { // Build child NFA Frag f = pattern.build(); if (pattern.value() != null) { // Add value state to child NFA f.connect(new ValueState(pattern.value())); } // Add child NFA to next states of fragment start frag.start.add(f.start); // Add child NFA out (unlinked) states to out (unlinked) states of this fragment frag.add(f.out); } frag.start.markOptional(true); return frag; }
@Override protected Frag build() { Frag frag = new Frag(); frag.start = new State(); // Create NFA fragment that // have one starting state that branches out to NFAs created by the children expressions // ---> pattern 1 ---> // | // ---> pattern 2 ---> // ... for (PatternExpr pattern : patterns) { // Build child NFA Frag f = pattern.build(); if (pattern.value() != null) { // Add value state to child NFA f.connect(new ValueState(pattern.value())); } // Add child NFA to next states of fragment start frag.start.add(f.start); // Add child NFA out (unlinked) states to out (unlinked) states of this fragment frag.add(f.out); } return frag; }
protected SequencePattern(String patternStr, SequencePattern.PatternExpr nodeSequencePattern, SequenceMatchAction<T> action) { this.patternStr = patternStr; this.patternExpr = nodeSequencePattern; this.action = action; nodeSequencePattern = new GroupPatternExpr(nodeSequencePattern, true); nodeSequencePattern = nodeSequencePattern.optimize(); this.totalGroups = nodeSequencePattern.assignGroupIds(0); Frag f = nodeSequencePattern.build(); f.connect(MATCH_STATE); this.root = f.start; varGroupBindings = new VarGroupBindings(totalGroups+1); nodeSequencePattern.updateBindings(varGroupBindings); }
protected SequencePattern(String patternStr, SequencePattern.PatternExpr nodeSequencePattern, SequenceMatchAction<T> action) { this.patternStr = patternStr; this.patternExpr = nodeSequencePattern; this.action = action; nodeSequencePattern = new GroupPatternExpr(nodeSequencePattern, true); this.totalGroups = nodeSequencePattern.assignGroupIds(0); Frag f = nodeSequencePattern.build(); f.connect(MATCH_STATE); this.root = f.start; varGroupBindings = new VarGroupBindings(totalGroups+1); nodeSequencePattern.updateBindings(varGroupBindings); }
protected SequencePattern(String patternStr, SequencePattern.PatternExpr nodeSequencePattern, SequenceMatchAction<T> action) { this.patternStr = patternStr; this.patternExpr = nodeSequencePattern; this.action = action; nodeSequencePattern = new GroupPatternExpr(nodeSequencePattern, true); nodeSequencePattern = nodeSequencePattern.optimize(); this.totalGroups = nodeSequencePattern.assignGroupIds(0); Frag f = nodeSequencePattern.build(); f.connect(MATCH_STATE); this.root = f.start; varGroupBindings = new VarGroupBindings(totalGroups+1); nodeSequencePattern.updateBindings(varGroupBindings); }
@Override protected Frag build() { Frag frag = expr.build(); frag.connect(new ValueState(value)); return frag; }
public <T2> SequencePattern<T2> transform(NodePatternTransformer<T,T2> transformer) { if (action != null) { throw new UnsupportedOperationException("transform on actions not yet implemented"); } SequencePattern.PatternExpr transformedPattern = this.patternExpr.transform(transformer); // TODO: Make string unique by indicating this pattern was transformed return new SequencePattern<>(this.patternStr, transformedPattern, null); }
@Override protected PatternExpr optimize() { return new ValuePatternExpr(expr.optimize(), value); }
@Override protected PatternExpr transform(NodePatternTransformer transformer) { return new ValuePatternExpr(expr.transform(transformer), value); }
@Override protected Frag build() { Frag frag = expr.build(); frag.connect(new ValueState(value)); return frag; }
@Override protected PatternExpr optimize() { return new RepeatPatternExpr(pattern.optimize(), minMatch, maxMatch, greedyMatch); } @Override
@Override protected PatternExpr transform(NodePatternTransformer transformer) { return new GroupPatternExpr(pattern.transform(transformer), capture, captureGroupId, varname); }
@Override protected void updateBindings(VarGroupBindings bindings) { for (PatternExpr pattern : patterns) { pattern.updateBindings(bindings); } }
protected void updateBindings(VarGroupBindings bindings) { for (PatternExpr pattern : patterns) { pattern.updateBindings(bindings); } }
@Override protected PatternExpr copy() { return new GroupPatternExpr(pattern.copy(), capture, captureGroupId, varname); }
@Override protected PatternExpr copy() { List<PatternExpr> newPatterns = new ArrayList<>(patterns.size()); for (PatternExpr p:patterns) { newPatterns.add(p.copy()); } return new AndPatternExpr(newPatterns); }