This is an exponential case for the code generator. It is similar to the one 
which is sent by Ralf recently.
 
In PCRE, if P is not a character literal or a backreference, (P){n,m} is 
expanded to

(P)(P)(P)...(P)(?:(P)(?:(P)....)?)?

The code generator optimize these patterns one-by-one, and this process 
requires a lot of time and an enormous stack space. Where do you use such 
pattern? Can't you use a better pattern?

Ahead-of-time (AOT) compilation is not really useful in my experiences, because 
pointers are not known at compile time, and you need to replace them by costly 
memory reads and writes. If you really prefer AOT, I would suggest other tools, 
such as lex/flex/ etc. which generates C code.

Regards,
Zoltan

ND <nad...@mail.ru> írta:
>Hi, Zoltan!>
>
I'm start testing JIT and meets two problems:>
>
>
1. here is pcretest listing>
>
PCRE version 8.33-RC1 2012-12-07>
>
/((((((((((\w{4}aa){4}aa){4}aa){3}aa){4}aa){2}aa){4}aa){3}aa){3}aa){11}aa){3}aa/imsxS+>
Compile time 4.0000 milliseconds>
   Study time 4637.0000 milliseconds>
01234567890123456789012345678901234567890123456789012345678901234567890123456789.>
Execute time 0.0000 milliseconds>
No match>
>
Study time is 4 seconds!!! Wow! It's enormous large!>
Is there a way to optimize?>
>
>
2. Since JIT study time is so large, why there is no possibility to precompile 
JIT data? Precompiling may be excellent way to expand JIT's sphere of 
application.>
>
Regards>
>
-- >
## List details at https://lists.exim.org/mailman/listinfo/pcre-dev >


-- 
## List details at https://lists.exim.org/mailman/listinfo/pcre-dev 

Reply via email to