Created
October 29, 2019 12:26
-
-
Save JRaspass/55a0ac1982cbe8ebf6c93b16275fbe29 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
grammar Grammar { | |
rule TOP { <table>+ } | |
rule table { '[' '"'? <key> '"'? ']' <key-val>+ } | |
rule key-val { <key> '=' <val> } | |
token key { <[ A .. Z a .. z 0 .. 9 . _ + - ]>+ } | |
proto token val {*} | |
token val:sym<bool> { 'true' | 'false' } | |
token val:sym<int> { \d+ } | |
token val:sym<str> { '"' <(.+?)> '"' } | |
} | |
class Actions { | |
method TOP ($/) { make %( $<table>».made.flat ) } | |
method table ($/) { make $<key>.made => %( $<key-val>».made ) } | |
method key-val ($/) { make $<key>.made => $<val>.made } | |
method key ($/) { make ~$/ } | |
method val:sym<bool> ($/) { make $/ eq 'true' } | |
method val:sym<int> ($/) { make +$/ } | |
method val:sym<str> ($/) { make ~$/ } | |
} | |
my %dists = Grammar.parse(slurp('dists.toml'), :actions(Actions)).made; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment