Skip to content
/ meta-II Public

Implementation of bootstrapped metaII metacompiler using perl 5 regex

Notifications You must be signed in to change notification settings

kidd/meta-II

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MetaII

./img/penrose.gif

1 What

This is my implementation of Schorre’s metaII metacompiler using perl5 regex’s for bootstrapping and compiling to lua (using https://loup-vaillant.fr/projects/metacompilers lua’s model). Articles abut the implementation and random ramblings also in my blog.

2 Why

Reading about metacompilers I’ve tinkered with them on and off for a couple of months, taking off from loup’s implementation, but when I was reading perlre, I rediscovered the (?{}) extended pattern, which basically does the same as metaII ouptut patterns, so I tried to bootstrap a metaII compiler using recursive regular expressions and (?{}).

3 Why should I care?

Take a look at ./bootstrap.txt , and if you don’t find that a piece of self-reference beauty, you probably shouldn’t care at all.

4 Curious to note from the code:

4.1 Recursive regexes in perl can call themselves.

Or call undefined regexes at compile time: Instead of directly calling them by name, you have to wrap them into (??{our $regex}) to delay the evaluation to runtime.

4.2 /x flag in regex is invaluable in this case.

4.3 Perldoc

Perl has by far the best documentation I’ve read for any programming language. Fun to read, useful and pragmatic at the same time. Take a look at Backtracking to see a great explanation of backtracking behaviour in regexes.

4.4 Special vars in Perl regexen.

$[1-9] get reset after a complete regex has ben matched, but not during the matching. If you need to match the latest match in this very same regex, use $^N. Use a stack in case of nested regexes needing the ‘latest match’. More regex wizardy in “Parsing JSON with a single regex”: https://www.youtube.com/watch?v=-O-Uajd2WzU

5 See also

6 Who

About

Implementation of bootstrapped metaII metacompiler using perl 5 regex

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published