\n{from}{from}(64+{index}{rank}0({negate}65+{quad}av{index}'ACE')){from}{quad}av\n
Using the approximations
from = @
index = i
rank = "
negate = -
quad = []
\n@@ (64 + i"0 (-65 + []av i 'ACE')) @ []av\n
The input is the vector 'ACE' - the output of this idiom is
\nAAA AAB AAC AAD AAE\nABA ABB ABC ABD ABE\nACA ACB ACC ACD ACE\nA@A A@B A@C A@D A@E\nA@A A@B A@C A@D A@E\n\n@AA @AB @AC @AD @AE\n@BA @BB @BC @BD @BE\n@CA @CB @CC @CD @CE\n@@A @@B @@C @@D @@E\n@@A @@B @@C @@D @@E\n\n@AA @AB @AC @AD @AE\n@BA @BB @BC @BD @BE\n@CA @CB @CC @CD @CE\n@@A @@B @@C @@D @@E\n@@A @@B @@C @@D @@E\n\n@AA @AB @AC @AD @AE\n@BA @BB @BC @BD @BE\n@CA @CB @CC @CD @CE\n@@A @@B @@C @@D @@E\n@@A @@B @@C @@D @@E\n\n@AA @AB @AC @AD @AE\n@BA @BB @BC @BD @BE\n@CA @CB @CC @CD @CE\n@@A @@B @@C @@D @@E\n@@A @@B @@C @@D @@E\n
The characters "@" are fills generated by the differing lengths of A, ABC, ABCDE. You could select them out but I'm done with this :) In real life you'd probably want the sub-expressions and not just the three-letter ones.
Note, the input here has to be caps, and if the machine is running EBCDIC, forget it :)