> At this level of generality, the assembler goes from being a trivial> program, to an N-pass assembler (if you limit the expressions) or a> symbolic algebra program (if you have no limits). Of course I'd like> to see someone implement a completely general assembler :-)

Symbolic algebra is easy to do in Lisp. Forth assemblers are usually
one-pass with backpatching.