35 lines
1.1 KiB
Plaintext
35 lines
1.1 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 ( '|' regex )?
|
|
sequence ::= term+
|
|
term ::= ( '.' | class | literal | '(' regex ')' ) quantifier?
|
|
class ::= '[' '^'? literal+ ']'
|
|
literal ::= non-special | '\' special
|
|
quantifier ::= '*' | '+' | '?'
|
|
special ::= quantifier | '|' | '(' | ')' | '[' | ']' | '^' | '\'
|
|
|
|
|
|
Building and Running Tests
|
|
|
|
There are two scripts, build.sh and test.sh, which will (much to
|
|
everybody's shock) build and run tests. The build script uses Clang
|
|
but the code is ISO C11 so it should compile just fine with GCC or
|
|
something instead.
|
|
|
|
sh scripts/build.sh # Compile library and test code
|
|
sh scripts/test.sh # Run tests
|
|
|
|
There is also an entr.sh script which will watch all the project's
|
|
files and rebuild and rerun the tests on any changes, using the entr
|
|
tool.
|