Asmj came about because the old Windoze(ick!) PC that I had been using for CoCo development work got trashed by a fire. My newer Linux box(yay!) is a much nicer platform, but I was shocked to find no 6809 assembler currently available for it on SourceForge. So, I said (famous last words) "how hard could it be?", and got coding.
Suprisingly, the hardest part so far has been the parsing of numeric expressions - almost half of the generic part of the assembler went into that.
Also surprisingly, parsing the entire instruction set was not so hard. Inheritance does most of the work here, since I chose to implement each insruction as a class. (But then, to save typing, I wrote a little generator to spit out those class definitions from a table of instruction data. And later I decided to make those things each an instance of a common base class, rather than each being a class.)
Since the goal was just to be able to assemble little 6809 programs, the result is not efficient, rich in features, or even very clean. With time, the later two may improve, but because of some early design choices it is not ever likely to be very efficient. On the plus side, of course, it already exists and works, while I might have never built up enough enthusiasm to implement a "better" design.