GPLEX и GPPG же (можно сказать, что порт flex/yacc)
А вообще задача парсить свои DSL - это очень частая в мире .NET задача. Правда, её обычно на DLR-языках решают типа IronPython.
Ну и какой смысл на настолько абстрактном языке писать кодогенераторы? Чтобы посильнее помучаться? Плюсом отдельный геморой по кодогенерации в ассемблер таргета с оптимизациями и прочим.