Ce parseur la est de la descente recursive: il y a en gros une fonction par non terminal dans la grammaire et on appelle la fonction qui va bien ou ca va bien. C'est le genre de code qui est genere par certains types de generateurs. (Avec ces generateurs, je me retrouve souvent en fait a penser au code final que je veux puis a essayer de l'exprimer dans la syntaxe du generateur).
Oui et non. Si la grammaire change tout les jours et est suffisamment sous contrôle pour que ses changements respectent les contraintes du générateur, je suis d'accord. Sinon, le travail d'adaptation aux contraintes du générateur est tout aussi emmerdant -- et avec certains générateurs, beaucoup moins intuitif.Citation:
Mais si tu veux complexifier (ne serais-ce qu'un tout petit peu) ta grammaire, ça devient vite emmerdant à maintenir.
Sinon, j'ai de l'experience en la matiere avec des parseurs ecrits a la main et des parseurs utilisant des generateurs (j'ai meme ecrit des generateurs). A la fois pour des langages normalises, et pour des formats de description de fichiers divers.
Pour ces derniers (ou en fait la mode de nos jours serait d'utiliser du XML, mais ils ont un historique predatant XML -- XML decrit directement l'AST, si on fait un langage on va essayer d'etre plus lisible), les generateurs sont interessants. Parce que le format est sous notre controle (et donc qu'on peut choisir de ne pas et que l'adequation de la grammaire avec le generateur est donc garantie. C'est ce que j'apellais la complexite moyenne.
Pour les langages, les generateurs sont plutot une gene: ils facilitent un peu les 80% du boulot le plus facile mais rende encore plus penible les 20% restant (les parties du langage non LALR et sortir des messages d'erreur d'une qualite convenable, en particulier quand on veut un parseur unique pour traiter -- les generateurs GLR sont une solution pour le premier point, mais je n'ai aucune indication qu'il y ait une solution convenable avec des generateurs pour le second). C'est pas un hasard si gcc a laisser tomber les generateurs pour le C et le C++ et n'en a jamais utilise de generateur pour Ada (il me semble que c'est le cas de clang aussi).
Pour quelque chose de simple comme des expressions, en fait n'importe quoi qui est familier est préférable a quelque chose de pas familier. Mais un programmeur pas familier avec les techniques pour les écrire a la main a un trou dans sa formation.