_seps: "/(){},.:='-!"
20 neq = [term:"left" .w? "!=" .w? term:"right"]
19 role_block = [term:"role" .w? "{" .w? .s!.([.w? "," .w?] [
.r?([comment .w?]) term:"arg"]) .w? "}"]
18 amb = {
["no" .w? "amb":!"amb"]
["amb":"amb"]
}
17 rule_term = {
uniq:"uniq"
role_of:"role_of"
"amb":"amb"
has:"has"
eq:"eq"
neq:"neq"
rel:"rel"
}
16 rule = [rule_term:"res" .w? ":-" .w? .s!([.w? "," .w?] rule_term:"arg") .w? "."]
15 inner = ["." term:"arg"]
14 app = [.._seps!:"f" "(" .w? .s?([.w? "," .w?] {
[".." .._seps!:"tail_sym"]
"..":"tail"
term:"arg"
}) .w? ")"]
13 amb_role = ["amb_role" .w? "(" .w?
term:"a" .w? "," .w? term:"b1" .w? "," .w? term:"b2" .w? ")"]
12 comment = ["//" ..."\n"?]
11 amb_rel = ["amb_rel" .w? "(" .w?
term:"a" .w? "," .w? term:"b1" .w? "," .w? term:"b2" .w? ")"]
10 has = [term_no_app:"f" .w? "(" .w? term:"arg" .w? ")" .w? "=>" .w? term:"res"]
9 ava = [.._seps!:"avatar" "'" .w? "(" .w? term:"core" .w? ")"]
8 uniq = ["uniq" .w! term:"arg"]
7 eq = [term_no_app:"f" .w? "(" .w? term:"arg" .w? ")" .w? "=" .w? term:"res"]
6 rel = ["(" .w? term:"a" .w? "," .w? term:"b" .w? ")"]
5 sym = {.t?:"str_val" .._seps!:"val"}
4 role_of = {
["role_of(" .w? term:"arg" .w? ")" .w? "=" .w? term:"role"]
[term:"arg" .w? ":" .w? term:"role"]
}
3 term = {inner:"inner" ava:"ava" app:"app" sym:"sym"}
2 term_no_app = {inner:"inner" ava:"ava" sym:"sym"}
2 expr = {
rule:"rule"
uniq:"uniq"
role_of:"role_of"
amb_role:"amb_role"
amb_rel:"amb_rel"
amb
has:"has"
eq:"eq"
rel:"rel"
}
1 data = .l({
["import" .w! .t!:"import"]
["eval" .w! .._seps!:"eval"]
["no" .w! "eval":"no_eval"]
role_block
[expr:"expr" .w?]
comment
})
0 document = [.w? data:"data" .w?]