// K 2x2 parser / tokenize t:{+((c@*:)'r;r:{x _dv""}1_{:[x=":";(y;x);y=":";"";,y]}':" ",x," ")} / (..(type;token)..) c:{:[x _in"abcdefghijklmnopqrstuvwxyz";`n;x="(";`l;x=")";`r;x _in"'/\\";`a;`v]} / classify / nest on parentheses, enlist n_:{(np .)/(1;el x;())};n:*|n_@ / nest recursive el:{@[@[x;i;:[;(`n;"()")]];-1+i:&0{`l`r~(*y;*x)}':x;:[;()]]_dv()} / "(" ")" -> "()" np:{:[~x&#y;(0;y;z);(a:***y)=`l;{(1;y;x,,lp z)}[z].-2#n_ 1_ y;a=`r;(0;1_ y;rp z);(1;1_ y;z,,*y)]} / nest over lp:{.[x;0 1;{"(",x}]};rp:{|.[|x;0 1;,;")"]} / prefix/suffix parens / power and result B[`n`u`v`a;`n`u`v`a]:(0 -1 4 5;3 -1 -1 -1;2 1 1 5;-1 -1 -1 -1) / binding powers C[`n`u`v`a;`n`u`v`a]:(`n``u`v;`n```;`n`v`v`v;````) / result categories / parse p:{*(1<#:)(bind . drop@)/|@[x;&{:[1=#x;1;~4:x 1]}'x;`n,1__f@]} / typed-tokens -> parse-tree bind:{,/.[(0,y+0 2)_ x;1;{,(y;|x)};C . x[1 0+y;0]]} / ..xy.. -> ..(t;yx).. drop:{(x;:[&/=':k:{B[x;y]}':*:'x;0;((&':`n~*:'-1_ x)|<':k)?1])} / drop in power or n n .. / represent r:{:[4:x 1;x 1;,/_f'x 1]} / original s:{:[4:x 1;x 1;1!")(",,/_f'x 1]} / curried / tests f~g:. r p n t@$f:((,/@/:)/,\(,<<:)'=:) x:10;y:20;z:30 40 50 . s p n t"x+y-*z" \ / parens are included as no-op markers p n t@$f (`v ((`v ((`n ((`v ((`v;"(,") (`a;,"/"))) (`v ((`v;,"@") (`a;"/:)"))))) (`a;,"/"))) (`v ((`v ((`v;,",") (`a;,"\\"))) (`v ((`v ((`n ((`v;"(,") (`v ((`v;,"<") (`v;"<:)"))))) (`a;,"'"))) (`v;"=:")))))))