# RREX
## Regular expression interpreter / validator
This regular expression validator is made with the target to be faster than the glibc regular expression validator and with success. In 23/25 tests it scores a better result than the original glibc validator. My bytecode compiler is way faster than the one provided by glibc and my executor often. For single validation, my validator is always a better choice.
## Benchmark and test
Benchmark vs. glibc regex. (Animated gif, takes some time to load)
![Gif of build process](build.gif)
## Todo / issues
- Segmenation fault fix is expr ends with \\d?
- rassert(!rrex("123", "[123]+b")); doesn't work
- abc with abc[gg]d matches valid. Shouldn't be so
## Make
### `all:`
Runs the following tasks sequentially:
- **`one-file:`** Merges, formats, and compiles a single C file.
- **`format_all:`** Formats all `.c` and `.h` files using `clang-format`.
- **`build:`** Compiles the main program (`rrex2.c`) with optimization and static linking.
- **`run:`** Executes the compiled program (`rrex2`).
### `format_all:`
Formats all `.c` and `.h` files in the directory using `clang-format`.
### `build:`
Compiles `rrex2.c` into an executable named `rrex2` with optimization (`-O2`), all warnings enabled (`-Wall`), and extra warnings enabled (`-Wextra`). The executable is statically linked.
### `run:`
Runs the compiled program (`rrex2`).
### `test:`
Rebuilds the project by running the `build` target and then runs the program with `test` as an argument.
### `cli:`
Runs the `build` target and then executes the program in CLI mode.
### `compiler:`
Compiles `compiler.c` into an optimized executable `compiler.o` and then runs it.
### `backup:`
Creates a compressed archive (`rrex.rzip`) of all `.c`, `.h`, Makefile, and markdown files in the directory.
### `coverage:`
Generates code coverage information:
- Removes existing coverage data files.
- Compiles `rrex2.c` with profiling and test coverage flags.
- Executes the compiled coverage binary with `test` as an argument.
- Captures coverage data with `lcov` and generates an HTML report using `genhtml`.
- Opens the coverage report in Google Chrome.
- Cleans up intermediate coverage files and the binary.