[Java lista] Pattern.compile bug (jdk 1.5) -- meglepo vegkifejlet

Böszörményi Péter zmblevlist at gmail.com
2008. Már. 5., Sze, 11:05:45 CET


Esetleg valaki nem ugrik neki szabadidejeben egy profirellel? Lehet,
akkor okosabb lenne az ember.

On 3/5/08, Andras Dobrosi <andris at freemail.hu> wrote:
> Hatha valaki kiszur vmit:
>
> /**
> * Processes repetition. If the next character peeked is a quantifier
> * then new nodes must be appended to handle the repetition.
> * Prev could be a single or a group, so it could be a chain of nodes.
> */
> private Node closure(Node prev) {
> Node atom;
> int ch = peek();
> switch (ch) {
> case '?':
> ch = next();
> if (ch == '?') {
> next();
> return new Ques(prev, LAZY);
> } else if (ch == '+') {
> next();
> return new Ques(prev, POSSESSIVE);
> }
> return new Ques(prev, GREEDY);
> case '*':
> ch = next();
> if (ch == '?') {
> next();
> return new Curly(prev, 0, MAX_REPS, LAZY);
> } else if (ch == '+') {
> next();
> return new Curly(prev, 0, MAX_REPS, POSSESSIVE);
> }
> return new Curly(prev, 0, MAX_REPS, GREEDY);
> case '+':
> ch = next();
> if (ch == '?') {
> next();
> return new Curly(prev, 1, MAX_REPS, LAZY);
> } else if (ch == '+') {
> next();
> return new Curly(prev, 1, MAX_REPS, POSSESSIVE);
> }
> return new Curly(prev, 1, MAX_REPS, GREEDY);
> case '{':
> ch = temp[cursor+1];
> if (ASCII.isDigit(ch)) {
> skip();
> int cmin = 0;
> do {
> cmin = cmin * 10 + (ch - '0');
> } while (ASCII.isDigit(ch = read()));
> int cmax = cmin;
> if (ch == ',') {
> ch = read();
> cmax = MAX_REPS;
> if (ch != '}') {
> cmax = 0;
> while (ASCII.isDigit(ch)) {
> cmax = cmax * 10 + (ch - '0');
> ch = read();
> }
> }
> }
> if (ch != '}')
> throw error("Unclosed counted closure");
> if (((cmin) | (cmax) | (cmax - cmin)) < 0)
> throw error("Illegal repetition range");
> Curly curly;
> ch = peek();
> if (ch == '?') {
> next();
> curly = new Curly(prev, cmin, cmax, LAZY);
> } else if (ch == '+') {
> next();
> curly = new Curly(prev, cmin, cmax, POSSESSIVE);
> } else {
> curly = new Curly(prev, cmin, cmax, GREEDY);
> }
> return curly;
> } else {
> throw error("Illegal repetition");
> }
> default:
> return prev;
> }
>
>
> Egyebkent pl. a case '{': agat pl. nem lehetett volna kicsit
> elegansabban megoldani (nekem igy elso blikkre eleg tragyanak tunik,
> biztos mar faradt volt a programozo, vagy haza akart erni a
> baratokkoztre)?!
>
> Andris
>
> 2008/3/5 Andras Dobrosi <andris at freemail.hu>:
> > Hali!
> >
> > Akkor cseréld a + is erre {1,} ! Szerintem se bug, de én sem nem tudom
> > miért lehet ez.
> >
> > Andris
> >
> > 2008/3/5 Molnár Miklós <timortinj at freemail.hu>:
> >
> >
> > > Hali,
> > >
> > >
> > > >Asszem erre megis csak mondhatjuk, hogy bug :).
> > >
> > > És biztosan nem lehet 'feature'? ;) /És a smiley ellenére azért
> komolyból is
> > > kérdezem.../
> > >
> > > MM
> > >
> > > PS:
> > > >Hat, ha arra panaszkodtam, hogy lassu, akkor te mire tippelsz? >;-)
> > >
> > > Azért nem volt számomra egyértelmű, mert a threadből nekem speciel az
> jött
> > > le, hogy vagy nagyon gyors, vagy nagyon lassú a regexpelési idő.
> > > Amúgy pedig bocs mindenkitől, hogy nekem mint a viccbeli Mórickának
> > > mindenről _az_ jut eszébe (lásd még 'bug vagy feature' problématikát),
> de én
> > > nem tudok elszakadni attól, hogy például a teljesen más SQL-világban,
> nap,
> > > mint nap találkozhatunk hasonlóan optimalizásra váró rejtélyes
> problémákkal,
> > > a márcsak a dolog természeténél is fogva. Lehet, hogy nagyon
> elrugaszkodok a
> > > talajról, de lehet, hogy mégsem olyan trivi a regexp-feldolgozás, mint
> > > elsőre gondolhatnók.
> > >
> > >
> > > __________ Information from ESET Smart Security, version of virus
> signature
> > > database 2922 (20080305) __________
> > >
> > > The message was checked by ESET Smart Security.
> > >
> > > http://www.eset.com
> > >
> > >
> > >
> > >
> > > _______________________________________________
> > > Javalist mailing list
> > > Javalist at javagrund.hu
> > > http://javagrund.hu/mailman/listinfo/javalist
> > >
> >
> _______________________________________________
> Javalist mailing list
> Javalist at javagrund.hu
> http://javagrund.hu/mailman/listinfo/javalist
>


További információk a(z) Javalist levelezőlistáról