bnfa Home
Status: Alpha
Brought to you by:
breese
BNFA is C++ regular expression matcher based on non-deterministic finite automata (NFA).
BNFA uses overloaded operators for writing regular expressions. This syntax has been inspired by Boost.Spirit (www.boost.org).
| Element | Regular expression | BNFA |
|---|---|---|
| Optional | a? | -a |
| One-or-more | a+ | +a |
| Zero-or-more | a* | *a |
| Exactly n times | a{n} | a(n) |
| Between m and n times | a{m,n} | a(m,n) |
| Concatenation | ab | a >> b |
| Alternation | a | b | a | b |
| Separated list | a(ba)* | a % b |
| Character | a | text("a") |
| Any character | . | any() |
| Character sequence | abc | text("abc") |
| Character group | [abc] | group("abc") |
| Character range | [a-z] | range('a', 'z') |
| Positive lookahead | (?=a) | &a |
| Negative lookahead | (?!a) | !a |
rule alphabetic = range('A', 'Z') | range('a', 'z');
rule digit = range('0', '9');
rule floating = -( group("+-") ) >> ( ( *digit >> text(".") >> +digit ) | +digit );