On pense souvent que les langages de programmation fonctionnels tels que Ocaml ou F# ont un système de types qui nous permet de passer plus de temps à écrire du code et moins de temps à le déboguer, par rapport au codage dans des langages dynamiques tels que Python ou JavaScript.
Je suis en train d'écrire une spécification d'analyseur syntaxique à utiliser avec FsLexYacc, le lexer et l'analyseur syntaxique de F#. La spécification de l'analyseur ressemble à ceci, pour l'analyse des nombres entiers et des noms d'identifiants :
%token <int> CSTINT
%token <string> NAME
...
Expr:
NAME {VAR $1}
|CSTINT {CSTI $1}
Ce type de code n'est plus écrit dans les langages de programmation de fonctions et n'est donc plus "protégé" par le système de types. Des bogues étranges peuvent facilement s'y glisser, je suppose (mais je n'en suis pas tout à fait sûr).
Question : Existe-t-il des travaux (théoriques ou pratiques) qui tentent de résoudre ce problème en fournissant une sorte de système de type également pour la spécification de l'analyseur/lecteur ?