private void internalCompile(String regex, int flags) throws PatternSyntaxException { stringRepr = regex; this.flags = flags; caseless = (flags & IGNORE_CASE) == IGNORE_CASE; Term.makeTree(regex, new int[]{flags}, this); }
private void internalCompile(String regex, int flags) throws PatternSyntaxException { stringRepr = regex; caseless = (flags & IGNORE_CASE) == IGNORE_CASE; Term.makeTree(regex, new int[]{flags}, this); }
static void makeTree(String s, int[] flags, Pattern re) throws PatternSyntaxException { instances = 0; char[] data = s.toCharArray(); makeTree(data, 0, data.length, flags, re); }
static void makeTree(String s, int[] flags, Pattern re) throws PatternSyntaxException { instances = 0; char[] data = s.toCharArray(); makeTree(data, 0, data.length, flags, re); }
private static void makeTree(char[] data, int offset, int end, int[] flags, Pattern re) throws PatternSyntaxException { // memreg,counter,depth,lookahead int[] vars = {1, 0, 0, 0}; //don't use counters[0] //collect iterators for subsequent optimization ArrayList<TermIterator> iterators = new ArrayList<TermIterator>(); HashMap<String, Integer> groupNames = new HashMap<String, Integer>(); Pretokenizer t = new Pretokenizer(data, offset, end); Term term = makeTree(t, data, vars, flags, new Group(), iterators, groupNames); // convert closing outer bracket into success term term.out.type = SUCCESS; //throw out opening bracket Term first = term.next; // Optimisation: Term optimized = first; Optimizer opt = Optimizer.find(first); if (opt != null) optimized = opt.makeFirst(first); for (TermIterator i : iterators) { i.optimize(); } re.root = optimized; re.root = first; re.root0 = first; re.memregs = vars[MEMREG_COUNT]; re.counters = vars[CNTREG_COUNT]; re.lookaheads = vars[LOOKAHEAD_COUNT]; re.namedGroupMap = groupNames; }
private static void makeTree(char[] data, int offset, int end, int[] flags, Pattern re) throws PatternSyntaxException { // memreg,counter,depth,lookahead int[] vars = {1, 0, 0, 0}; //don't use counters[0] //collect iterators for subsequent optimization ArrayList<TermIterator> iterators = new ArrayList<TermIterator>(); HashMap<String, Integer> groupNames = new HashMap<String, Integer>(); Pretokenizer t = new Pretokenizer(data, offset, end); Term term = makeTree(t, data, vars, flags, new Group(), iterators, groupNames); // convert closing outer bracket into success term term.out.type = SUCCESS; //throw out opening bracket Term first = term.next; // Optimisation: Term optimized = first; Optimizer opt = Optimizer.find(first); if (opt != null) optimized = opt.makeFirst(first); for (TermIterator i : iterators) { i.optimize(); } re.root = optimized; re.root = first; re.root0 = first; re.memregs = vars[MEMREG_COUNT]; re.counters = vars[CNTREG_COUNT]; re.lookaheads = vars[LOOKAHEAD_COUNT]; re.namedGroupMap = groupNames; }
case Pretokenizer.PLAIN_GROUP: vars[DEPTH]++; term.append(makeTree(t, data, vars, new int[]{t.flags(flags[0])}, new Group(), iterators, groupNames)); break; case Pretokenizer.NAMED_GROUP: term.append(makeTree(t, data, vars, flags, new Group(id), iterators, groupNames)); break; case '(': vars[DEPTH]++; term.append(makeTree(t, data, vars, flags, new Group(vars[MEMREG_COUNT]++), iterators, groupNames)); break; case Pretokenizer.POS_LOOKAHEAD: vars[DEPTH]++; term.append(makeTree(t, data, vars, flags, new Lookahead(vars[LOOKAHEAD_COUNT]++, true), iterators, groupNames)); break; case Pretokenizer.NEG_LOOKAHEAD: vars[DEPTH]++; term.append(makeTree(t, data, vars, flags, new Lookahead(vars[LOOKAHEAD_COUNT]++, false), iterators, groupNames)); break; case Pretokenizer.POS_LOOKBEHIND: vars[DEPTH]++; term.append(makeTree(t, data, vars, flags, new Lookbehind(vars[LOOKAHEAD_COUNT]++, true), iterators, groupNames)); break; case Pretokenizer.NEG_LOOKBEHIND: vars[DEPTH]++; term.append(makeTree(t, data, vars, flags, new Lookbehind(vars[LOOKAHEAD_COUNT]++, false), iterators, groupNames)); break; case Pretokenizer.INDEPENDENT_REGEX:
case Pretokenizer.PLAIN_GROUP: vars[DEPTH]++; term.append(makeTree(t, data, vars, new int[]{t.flags(flags[0])}, new Group(), iterators, groupNames)); break; case Pretokenizer.NAMED_GROUP: term.append(makeTree(t, data, vars, flags, new Group(id), iterators, groupNames)); break; case '(': vars[DEPTH]++; term.append(makeTree(t, data, vars, flags, new Group(vars[MEMREG_COUNT]++), iterators, groupNames)); break; case Pretokenizer.POS_LOOKAHEAD: vars[DEPTH]++; term.append(makeTree(t, data, vars, flags, new Lookahead(vars[LOOKAHEAD_COUNT]++, true), iterators, groupNames)); break; case Pretokenizer.NEG_LOOKAHEAD: vars[DEPTH]++; term.append(makeTree(t, data, vars, flags, new Lookahead(vars[LOOKAHEAD_COUNT]++, false), iterators, groupNames)); break; case Pretokenizer.POS_LOOKBEHIND: vars[DEPTH]++; term.append(makeTree(t, data, vars, flags, new Lookbehind(vars[LOOKAHEAD_COUNT]++, true), iterators, groupNames)); break; case Pretokenizer.NEG_LOOKBEHIND: vars[DEPTH]++; term.append(makeTree(t, data, vars, flags, new Lookbehind(vars[LOOKAHEAD_COUNT]++, false), iterators, groupNames)); break; case Pretokenizer.INDEPENDENT_REGEX: