3a578e190ff9aea56d3353f4ce3e423c23e7a98f
Returning false here would leave the destination sequence in an invalid state and may lead to leaked memory; until this is solved properly it is safer to assert().
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
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.
Description
Languages
C
96.2%
CMake
2.9%
Shell
0.9%