EBNF: interpolate var = "${" [^}]+ "}" => [[ [ second >string search , [ present write ] % ] [ ] make ]] text = [^$]+ => [[ [ >string , [ write ] % ] [ ] make ]] interpolate = (var|text)* => [[ [ ] join ]] ;EBNF : I[ "]I" parse-multiline-string interpolate parsed \ call parsed ; parsing ! Example :: foo ( a b -- ) I[ Hello ${a} and ${b}]I ; "foo" "bar" foo