Vous devriez étudier ce qu'on appelle metacompilers, qui compile essentiellement EBNF dans des analyseurs de descente récursifs. Comment ils le font est exactement la réponse à votre question. (Son assez straightfoward, mais bon à comprendre les détails).
Un papier vraiment merveilleux est le papier "MetaII" de Val Schorre. Il s'agit de la technologie métacompiler de 1964. En 10 pages, il vous montre comment construire un métacompilateur, et fournit non seulement cela, mais aussi un autre compilateur et la sortie des deux! Il y a un moment étonnant où vous venez aussi si vous allez en construire un, où vous avez réalisé comment le méta-compilateur se compile en utilisant sa propre grammaire. Ce moment m'a attrapé accroché sur le compilateur dans environ 1970 quand j'ai d'abord trébuché sur ce papier. C'est un de ces papiers d'informatique que tout le monde dans le logiciel devrait lire. James Neighbours (l'inventeur du terme «domaine» en génie logiciel, et constructeur du premier système de transformation de programme [basé sur ces métacompilers] a un grand MetaII tutorial en ligne, pour ceux d'entre vous qui ne veulent pas le faire -IT-from-scratch expérience. (Je n'ai rien à voir avec cette exception que Neighbours et moi étions étudiants de premier cycle en même temps).
Les deux façons sont une bonne façon d'en apprendre davantage sur metacompilers et générer des parseurs de EBNF.
Les idées clés sont que le côté gauche d'une règle crée une fonction qui analyse cette non-terminale et renvoie true si elle correspond et avance le flux d'entrée, false si aucune correspondance et le flux d'entrée ne progresse pas. Le contenu de la fonction est déterminé par le côté droit. Les jetons littéraux sont appariés directement. Les non-terminaux provoquent des appels à d'autres fonctions générées pour les autres règles. Kleene * est mappé aux boucles while, les alternatives sont mappées aux branches conditionnelles. Qu'est-ce que EBNF ne traite pas, et les méta-compilateurs font, est-ce que l'analyse syntaxique fait autre chose que de dire "apparié" ou non? Le secret est le tissage des opérations de sortie dans l'EBNF. Le papier MetaII rend tout ce cristal clair.
C'est génial. Merci pour le lien! Je dois absolument vérifier cela. –