Raccomando di creare il tuo DSL su una lingua esistente (DSL interno). Ho fatto questo alcune volte con Python, creando sistemi in cui il consumatore del DSL scrive un file python che viene usato come un file di configurazione per il sistema. Il file di configurazione utilizza costrutti (classi, funzioni) che ho definito. Questi costrutti formano il DSL.
IMO, un linguaggio come Python (IronPython o Jython se il sistema host è .NET o Java) o Ruby (IronRuby, JRuby) è migliore per basare la tua DSL su Java o C #.
Nel mio caso i sistemi host sono stati anche (C) Python, quindi scegliere Python per la DSL è stata la cosa naturale.
Alcuni professionisti:
- Minori costi di costruzione. C'è molto meno da implementare. Puoi concentrarti sul problema, invece di dedicare del tempo ad implementare un parser / compilatore / interprete.
- Accesso alla lingua ospite: la tua lingua avrà accesso a tutta la potenza della lingua / piattaforma esistente.