35 lines
1.2 KiB
Plaintext
35 lines
1.2 KiB
Plaintext
REGEX ENGINE
|
|
|
|
I've thought for a while it would be fun and interesting to write my
|
|
own regular expression engine using Thompson's construction algorithm,
|
|
so here we are.
|
|
|
|
|
|
Grammar
|
|
|
|
This engine is not going to be strictly supporting any standard
|
|
syntax; the expression syntax I intend to support follows.
|
|
|
|
regex ::= sequence ( '|' sequence )*
|
|
sequence ::= term+
|
|
term ::= ( '.' | class | literal | '(' regex ')' ) quantifier?
|
|
class ::= '[' '^'? literal+ ']'
|
|
literal ::= non-special | '\' special
|
|
quantifier ::= '*' | '+' | '?'
|
|
special ::= quantifier | '|' | '(' | ')' | '[' | ']' | '^' | '\'
|
|
|
|
|
|
Building and Running Tests
|
|
|
|
The build uses CMake. There are two scripts, build.sh and test.sh,
|
|
which will (much to everybody's shock) build the project and run the
|
|
tests. The build script specifies Clang but the code is ISO C11 so it
|
|
should compile just fine with GCC or something instead.
|
|
|
|
scripts/build.sh # Compile library and tests
|
|
scripts/test.sh # Run tests
|
|
|
|
There is also an entr.sh script which will watch all the project's
|
|
files and rebuild then rerun the tests on any changes (uses entr --
|
|
hence the name of the script).
|