Est-ce que vous êtes sûrs d'avoir vraiment besoin de fixer des spécifications rigides à votre langage ? Partir sur une base commune, c'est une bonne idée, ça permet de comparer les solutions et les choix d'implémentation ou de sémantique de chacun. Mais vous n'êtes pas le comité de normalisation du prochain C : personne n'utilisera ce langage "dans la vraie vie", il est là uniquement pour vous permettre d'apprendre des choses liées à la compilation ou l'interprétation. Partant de là, il est inutile de vouloir à tout prix définir des spécifications uniques ou parfaites : vous avez l'avantage énorme de ne pas avoir d'utilisateur, profitez-en !
Concrètement, partez sur une base commune minimaliste, et laissez chacun implémenter ce qu'il veut dessus. Et ne cherchez pas à vouloir tout définir proprement et précisément à tout prix : s'il reste des points flous (par exemple, est-ce que les entiers sont sur 32 bits ou sont des vrais entiers), ce n'est pas un problème, chacun l'interprétera comme il l'entend (et vous en parlerez une fois les résultats obtenus). Encore une fois, ne tombez pas dans le piège qui consiste à croire que vous visez un langage utilisable : ça paraît être une bonne idée, mais c'est partir dans une direction qui vous fera perdre beaucoup de temps et vous fermera beaucoup de portes. Je rejoins un peu ce que dit Nohar ici (et je crois que je l'ai dit il y a quelques semaines) : la bonne conception d'un langage, c'est un travail difficile, et ce n'est pas en essayant de faire ça parfaitement avant même d'avoir implémenté quoi que ce soit que vous y arriverez. Vous devez commencer par programmer, et c'est avec beaucoup d'expérience, d'utilisation de langage variés et d'implémentations de proofs of concept que vous aurez les idées un peu plus claires sur le sujet (et que vous pourrez alors avoir des discussions raisonnables). Ça ne doit vraiment pas être votre priorité actuelle.
–
J'ai parlé d'une base minimaliste plus haut. Le Lisp a ses vertus, et dans l'absolu ce n'est pas une mauvaise idée pour implémenter un langage jouet (notamment parce que la syntaxe est très facile à analyser, ce qui permet de se concentrer sur les problèmes intéressants), mais je ne pense pas que ce soit le plus adapté ici. C'est un langage très lié au paradigme fonctionnel, et sans l'avoir pratiqué un minimum (c'est-à-dire pas en ayant écrit une lambda en Python et une fonction récursive une fois), c'est un peu difficile de comprendre où on va; et pour ceux qui veulent en profiter pour apprendre le fonctionnel (bonne idée !), je ne pense pas que l'implémenter soit une bonne méthode (pratiquez plutôt, avec un langage comme OCaml qui est à mon avis un très bon choix pour découvrir et continuer - mais il y en a d'autres. Posez la question.)
Je vous conseille plutôt un langage impératif simple, dont vous maîtrisez à peu près tous les concepts de base. J'avais (ou quelqu'un d'autre avait) mis un lien vers un cours de thizanne sur progdupeu.pl, c'est déjà une bonne base : quand vous aurez implémenté ce qu'il propose avec les suggestions, ce sera déjà un petit succès. Vous pourrez ensuite par exemple vous intéresser à la compilation, et rien qu'avec un langage aussi minimaliste, vous aurez déjà suffisamment de boulot pour vous occuper quelques mois
Si vous voulez vraiment partir sur Lisp (je me répète : sans vous familiariser avant avec ce genre de langage, je pense que c'est un mauvais choix et un piège), et que vous voulez réviser un peu vos spécifications pour partir sur une base plus raisonnable (je pense que c'est indispensable), je posterai sans doutes quelques idées demain.