I don't know if this is useful for you but I thought it might be worth mentioning. I'm currently working on a "compiler" for what I temporarily call a meta-language. This "language" separates the input into three parts: initial output, the modify block, and what follows the modify block. The first part simply becomes the start of the output. The second part contains a grammar definition in PEG form (see:
http://en.wikipedia.org/wiki/Parsing_expression_grammar), which is used to modify the initial syntax-tree. Then it parses the third part using the modified syntax-tree, generating a parsed tree (similiar to an AST
http://en.wikipedia.org/wiki/Abstract_syntax_tree, however it also incorporates some code (defined in the second block) in every node, to be executed bottom-up and in order).
Basicly my attempt is to allow a more flexible an faster way to prototype programming languages. However it also allows for example for one to write a parser for a specific language (for example Forth in your case) as some simple rules, that outputs to another language (for example some sort of SSA (
http://en.wikipedia.org/wiki/Static_sin ... nment_form) intermediate language), and then another parser for that second language into another language (for example asm, or just pure binary).
I'm still coding it for fun and as a proof-of-concept. It is still unstable (such that it's current version is numbered 0.-1.2), and it's coded in ruby (because of some language facilities) resulting in a very poor compile time performance (and I mean very poor depending on the situation).
Anyway, it might aid you in someway. Feel free to contact me,
JVFF
PS: I have a post on gamedev forums outlining what I planned to do. The plan has changed in most parts (especially in the virtual machine department), but it does outline the goals in someway:
http://www.gamedev.net/community/forums ... _id=411775