Compile time regex matching

Philippe Sigaud via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Mon Jul 14 22:00:22 PDT 2014


On Mon, Jul 14, 2014 at 3:19 PM, Artur Skawina via Digitalmars-d-learn
<digitalmars-d-learn at puremagic.com> wrote:
> On 07/14/14 13:42, Philippe Sigaud via Digitalmars-d-learn wrote:
>> asserts get an entire copy of the parse tree. It's a bit wasteful, but
>> using 'immutable' directly does not work here, but this is OK:
>>
>>     enum res = MyRegex("abcabcdefFOOBAR"); // compile-time parsing
>>     immutable result = res; // to avoid copying the enum value everywhere
>
>    static immutable result = MyRegex("abcabcdefFOOBAR"); // compile-time parsing

Ah, static!


>
>> The static asserts then works (not the toString, though). Maybe
(snip diff)

I'll push that to the repo, thanks! I should sprinkle some const and
pure everywhere...

> [completely untested; just did a git clone and fixed the two
>  errors the compiler was whining about. Hmm, did pegged get
>  faster? Last time i tried (years ago) it was unusably slow;
>  right now, compiling your example, i didn't notice the extra
>  multi-second delay that was there then.]

It's still slower than some handcrafted parsers. At some time, I could
get it on par with std.regex (between 1.3 and 1.8 times slower), but
that meant losing some other properties. I have other parsing engines
partially implemented, with either a larger specter of grammars or
better speed (but not both!). I hope the coming holidays will let me
go back to it.


More information about the Digitalmars-d-learn mailing list