\d p parse:{value flat ternary unary elevate tree type group x} / (x) -> ,x group:{*(group_ .)/(();x)} group_:{:[~#y;(x;y);"("~**y;{(x,,group 1_ y;1_ z)}[x]. par y;(x,,*y;1_ y)]} lr:{:[x[0]~*y;(0,(=/+\'y~\:/:x)?1)_ y;(+,x),'(y;())]} par:lr[+,"()"] / "x" -> (`c;"x") type:{:[~4:x;_f'x;x[0]_in A;({`a};x);&/x _lin V;({`v};x);L~*x;({`l};x);R~*x;({`r};x);({`n};x)]} V:".-_~!@#$%^&*=+|<,>?:" A:"'/\\" L:"{" R:"}" / x is the type of the result of binding y and z S:(`nnn `vvv`vuv`vvu`vuu `nvn `nun `unv `vna`vva`vua`vnb`vvb`vub `vrn`aru`arv`ara`brb`nln`nlu`nlv`vla`vlb) / "xyz" -> B[y;z]=index of yz in S, C[y;z]=x abc:{ s:`$'''$(),/:x j:,/s[;;1 2];k:,/l:s[;;0];i:,/a,\:/:a:?,//s b:./[./[_n;i;:;-1];j;:;&#:'l] c:./[./[_n;i;:;_n];j;:;(. 1!"}{`",)'$k] (b;c)} @[_d;`B`C;:;abc S]; / parse 2x2 tree:{*(1<#:)(bind . drop@)/|@[x;&term'x;_f@]} / token-list -> parse-tree term:{:[1=#x;1;~4:x 1]} / nested token-list bind:{,/.[(0,y+0 2)_ x;1;pair;C_ . x[1 0+y;0]]} / ..xy.. -> ..(t;yx).. drop:{(x;(<':B_':*:'x)?1)} / drop in strength pair:{,(y;|x)} / binding operation B_:{B[x[]]y[]} / binding strength C_:{C[x[]]y[]} / result category / eliminate elevator: x(e(y;z)) -> xz elevate:{:[4:x 1;x;elevate_ ..[x;(1;);_f]]} elevate_:{:[y[0;0][]_in`l`r;(x;y[1]1);(x;y)]} / n(vn) -> n(v:n) unary:{:[4:x 1;u . x;unary_ .[x;(1;);_f]]} unary_:{:[vn x;u0;vu x;uu;vv x;u0;::]x} u:{:[(`v~x[])&(1<#y)&":"=*-1#y;({`u};y);(x;y)]} vv:{(`v=x[0][])&(`v=x[1;0;0][])&(~~4:x[1;0;1])&`v=x[1;1;0][]} vu:{(`v=x[0][])&(`v=x[1;0;0][])&(~~4:x[1;0;1])&`u=x[1;1;0][]} uu:{({`u};.[x;1 0;:;({`u};:[x[1;0;1;0]_in V;x[1;0;1],":";x[1;0;1]])])} vn:{(`v=x[1;0;0][])&(x[1;1;0][]_in`n`u)&~~4:x[1;0;1]} u0:{.[x;1 0;:;({`u};:[x[1;0;1;0]_in V;x[1;0;1],":";x[1;0;1]])]} / n(v(va)) -> n(v(vb)) ternary:{:[4:x 1;b . x;ternary_ .[x;(1;);_f]]} ternary_:{:[va x 1;vb x;x]} b:{:[(`a~x[])&(1<#y)&(&/y _lin A)&"."=*-1#y;({`b};y);(x;y)]} va:{:[~`n=x[0;0][];0;~`v=x[1;0][];0;4:x[1;1];0;(x[1;1;0;0][]_in`n`v)&`a=x[1;1;1;0][]]} vb:{.[x;1 1 1 1 0;:;{`b}]} / eliminate derived types flat:{:[4:x 1;x;_f'x 1]} / "x" -> x value:{:[4:x 1;@[x;1;k[x[0][]]];_f'x]} k[`n`v`u]:{:["`"=*x;sym x;"\""=*x;. x;x[0]_in V,"0123456789";. x;&/x _lin A,":";k.a x;(x[0]_in A)&"."_in x;k.b x;`$x]} k.a:{:[x[0]_in A;. 1!"}{x",x;`$x]} k.b:{:[x[0]_in A;. 2!"z}{y x",_dv[x;"."];`$x]} sym:{atom`$1_'(&x="`")_ x} atom:{:[1=#x;*x;x]} \d ^ parse:p.parse