/ atw, sa - parse categories / categories N:"abcdefghijklmnopqrstuvwxyz0123456789" / nouns V:":+-*%&|<>=~.!@?#_^,$ABCDEFGHIJKLMNOPQRSTUVWXYZ" / verbs A:"'/\\" / adverbs / type T:{" ()nva"@+/(!6)*(*:'x)_lin/:(+," ()"),(N;V;A)} / x -> " ()nva" / universe M:_.2*#U:,/("()a";" va";" va";" n ";" n ") / universe of types / reduce R:{:[|/z@:C[x]0;@[x;*i;:;y'(+i:-1 0++-1 2#&~1=':~z,0)(*_)\:x]@&~z;x]} / reduce R:{ if[~|/z@:C[x]0;:x] a:&~1=':~z,0 i:-1 0++-1 2#a b:(+i)(*_)\:x c:y'b d:@[x;*i;:;c] r:d@&~z r} r:{(_ x%M)!3} / rank i:{x-M*a[1!x]&v x} / preprocess v a j:{x@\:&~3=*x} / no blanks p:{-1!0<+\1 -1 0@2&*:'x} / parens a:{M<2+(*:'x)!M} / adverbs (will swap) v:{0':v@ / first verbs Y:{c[3 0],k -1_1_ x} / (x)-> k x X:{c C[i]+(M*~!#i:,/|x;0)} / xy->yx k:{,/R/[x;(Y;X;X);(p;a;b)]} / raze reduce over c:1000 _sv / encode value + position C:1000 _vs / decode value + position / parse P:{(x;(" ",x)p;(!4)a[d]+r d:*e;-1+p:*|e:j C k c(i U?/:t;1+!#t:T x))} P"((a+b))" \ P"+/x" P"a+0" P"(a+b)" P"+a" P"+((x+y)*z)" P"y@x+*/'-x*/y" P"(a+b)*-c%d" P"v-(x+y)-((z-k)+w)*a"