"Could not parse EBNF" throw\r
] if ;\r
\r
+: parse-ebnf ( string -- hashtable )\r
+ 'ebnf' parse check-parse-result ast>> transform ;\r
+\r
: ebnf>quot ( string -- hashtable quot )\r
- 'ebnf' parse check-parse-result \r
- parse-result-ast transform dup dup parser [ main swap at compile ] with-variable\r
+ parse-ebnf dup dup parser [ main swap at compile ] with-variable\r
[ compiled-parse ] curry [ with-scope ] curry ;\r
\r
+: <EBNF "EBNF>" reset-tokenizer parse-multiline-string parse-ebnf main swap at \r
+ parsed reset-tokenizer ; parsing\r
+\r
: [EBNF "EBNF]" reset-tokenizer parse-multiline-string ebnf>quot nip \r
parsed \ call parsed reset-tokenizer ; parsing\r
\r