MarpaX::Regex saw some progress recently: as an early preview, here is the
BNFied version of floating point regexp from
perlretut (parses, but ). Symbols, e.g. <start of line> ::= ^, can be defined for (arguably more) readability.
Perhaps I'm just "holy overanalyzing, Batman", but I have a question about empty capturing groups: how to implement them
as is, e.g.
s ::= 'house' ( 'cat' ( 's' |) |)
or allow them only via an empty rule, e.g.
s ::= 'house' ( 'cat' | empty )
s ::= 'house' ( 'cat' ( 's' | empty ) | empty )
I'm afraid the right decision is support both, but would appreciate other opinions. And any early feedback too. :)
As a general (perhaps incomplete) observation, POSIX [1] and Perl6 [2] seem to forbid empty capturing groups, while PCRE, ECMAscript, Java and .Net allow them and according to a book [2] such groups can be used intentionally, even if for the purposes MarpaX::Regex aims to serve.
[1] the empty group `()' in `a()b' is invalid
https://docs.freebsd.org/info/regex/regex.info.POSIX_Regular_Expression_Compiling.html