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