PistonDevelopers / meta

A DSL parsing library for human readable text documents
MIT License
89 stars 5 forks source link

Allow rules to take arguments #326

Open bvssvni opened 6 years ago

bvssvni commented 6 years ago

Sometimes you have several similar rules like this:

sum_in = [label {"sum" "∑"} in_body]
sum_short = [label {"sum" "∑"} short_body]
prod_in = [label {"prod" "∏"} in_body]
prod_short = [label {"prod" "∏"} short_body]

loops = {sum_in:"sum_in" sum_short:"sum_short" prod_in:"prod_in" prod_short:"prod_short"}

By allowing rules to take arguments:

l(op : a b) = {[label op in_body]:a [label op short_body]:b}

loops = {l({"sum" "∑"} : "sum_in" "sum_short") l({"prod" "∏"} : "prod_in" "prod_short")}

Notice the pattern <rules> : <strings> when passing arguments.

This might also allow external storage of rules in the future, such as a vocabulary.