Paste: poor deduplication of EBNF
Author: | Andy |
Mode: | factor |
Date: | Sat, 19 Apr 2025 19:30:37 |
Plain Text |
EBNF: parse-h-connection [=[
letter = [a-zA-Z]
dash = "-"
num = [0-9]+ => [[ string>number ]]
connection = letter (dash+)~ num (dash+)~ letter => [[ first3 swap [ 2array >hash-set ] dip <connection> ]]
]=]
EBNF: parse-h-connections [=[
noise = (!(<foreign parse-h-connection>) .)*
item = <foreign parse-h-connection>
line = (noise~ item)* noise~
]=]
EBNF: parse-v-connection [=[
letter = [a-zA-Z]
pipe = "|"
num = [0-9]+ => [[ string>number ]]
connection = letter (pipe+)~ num (pipe+)~ letter => [[ first3 swap [ 2array >hash-set ] dip <connection> ]]
]=]
EBNF: parse-v-connections [=[
noise = (!(<foreign parse-v-connection>) .)*
item = <foreign parse-v-connection>
line = (noise~ item)* noise~
]=]
[==[
USING: hash-sets multiline kernel arrays sequences math.parser peg.ebnf ;
IN: easters.good-friday
EBNF: ${name} [=[
letter = [a-zA-Z]
tether = "${tether}"
num = [0-9]+ => [[ string>number ]]
connection = letter (tether+)~ num (tether+)~ letter => [[ first3 swap [ 2array >hash-set ] dip <connection> ]]
]=]
EBNF: ${name}s [=[
noise = (!(<foreign ${name}>) .)*
item = <foreign ${name}>
line = (noise~ item)* noise~
]=]
]==]
[ { { "name" "parse-h-connection" } { "tether" "-" } } [ interpolate>string ] with-variables ]
[ { { "name" "parse-v-connection" } { "tether" "|" } } [ interpolate>string ] with-variables ] bi
[ eval( -- ) ] bi@
New Annotation