D'abord, je recommande la lecture du chapitre 9 (notation) de The Practice of Programming par Kernighan et Pike.
Lorsque vous avez fait cela, revenez ici avec des questions spécifiques sur la façon de mapper les concepts de ce chapitre à des conceptions spécifiques pour les problèmes que vous voulez résoudre.
Le motif de base consiste à écrire un interpréteur auquel est passé un argument 'command', et éventuellement un argument 'environment', et exécute la commande (dans l'environnement). Vous avez alors la possibilité d'écrire un analyseur, qui prend une chaîne 'script' et le convertit en un objet 'command' valide (c'est-à-dire un DSL externe); ou vous fournissez une bibliothèque pour aider les utilisateurs à créer l'objet 'command' explicitement dans la langue que vous utilisez (internal-DSL). Kernighan et Pike font un bon travail pour montrer à quel point un interpréteur peut être trivial et complexe. Si vous voulez plus de profondeur, alors je suggère de lire The Essentials of Programming Languages par Daniel Friedman et al. Ce qui construit au moins un interpréteur différent par chapitre, et montre comment implémenter des fonctionnalités telles que les variables, les fonctions, les étendues, les objets, les classes, le typage statique et les continuations.
Cependant, je suggérerais de vous essayer à un DSL trivial d'abord, sinon tout cela n'est que théorie - un livre est beaucoup plus intéressant quand il est rendu pertinent et pratique par votre expérience précédente.
Suggestion sérieuse: Implémentez-le en utilisant Groovy, Scala ou Clojure. – Mike
Cela dépend totalement de la complexité de la DSL. – NawaMan
+1 pour ne pas utiliser Java pour cela. Si quelque chose, j'utiliserais Ruby (ou JRuby). – cletus