lex & yacc (2nd ed.)
RE2C: a more versatile scanner generator
ACM Letters on Programming Languages and Systems (LOPLAS)
Native code compilation in SICStus Prolog
Proceedings of the eleventh international conference on Logic programming
VCODE: a retargetable, extensible, very fast dynamic code generation system
PLDI '96 Proceedings of the ACM SIGPLAN 1996 conference on Programming language design and implementation
Advanced compiler design and implementation
Advanced compiler design and implementation
Programming Techniques: Regular expression search algorithm
Communications of the ACM
LLVM: A Compilation Framework for Lifelong Program Analysis & Transformation
Proceedings of the international symposium on Code generation and optimization: feedback-directed and runtime optimization
HotpathVM: an effective JIT compiler for resource-constrained devices
Proceedings of the 2nd international conference on Virtual execution environments
Mastering Regular Expressions
FIRE-J—optimizing regular expression searches with generative programming
Software—Practice & Experience
Compilers: Principles, Techniques, & Tools with Gradiance
Compilers: Principles, Techniques, & Tools with Gradiance
Flex & Bison
Linear scan register allocation on SSA form
Proceedings of the 8th annual IEEE/ACM international symposium on Code generation and optimization
LL(*): the foundation of the ANTLR parser generator
Proceedings of the 32nd ACM SIGPLAN conference on Programming language design and implementation
Swift: a register-based JIT compiler for embedded JVMs
VEE '12 Proceedings of the 8th ACM SIGPLAN/SIGOPS conference on Virtual Execution Environments
Programming perl, third edition
Programming perl, third edition
Hi-index | 0.00 |
High matching performance of regular expressions is a critical requirement for many widely used software tools today, including web servers, firewalls, and intrusion detection systems. Backtracking regular expression engines have been considerably improved in the last decade as a result of this requirement. Today, state of the art engines use just-in-time (JIT) compilation support to generate machine code from regular expressions, and they use new, innovative techniques to further improve the speed of the generated code. In the present paper, we introduce a new technique called static backtracking, which allows simultaneous optimization of both matching and backtracking. Based on this technique, we developed a JIT compiler for the widely used PCRE regular expression library. Our compiler supports all valid PCRE patterns, which shows that static backtracking is a viable choice for Perl compatible engines. We also show that our balanced, Abstract Syntax Tree based code generator efficiently improves the performance of long-running, backtracking heavy regular expressions. Compared to another JIT accelerated regular expression engine, PCRE-JIT was able to run these patterns 1.95 times faster. Since these long-running patterns dominate the total runtime, PCRE-JIT achieved 1.63 times faster matching speed overall. We also observed 6.36 times average speedup compared to the PCRE interpreter on 5 different CPU architectures.