Bonjour !

Vous vous dites surement, "tiens, ce mec a décidé de réécrire un parseur C". C'est vrai. Et il est bien ennuyé. C'est vrai aussi. Et ca dépends fortement du générateur de parseur qu'il utilise. C'est encore vrai. Il utiliserait un autre outil, quelque chose de costaud comme ANTLR, il n'aurait pas les problèmes qu'il rencontre. Je ne peux pas dire non. Mais au lieu de ça, il utilise un outil plus simple comme Coco/R et du coup, il est limité à des grammaires simplistes type LL(k) avec prédicats. Encore une fois, vous avez raison.

(note: un prédicat permet de choisir une alternative particulière lorsqu'on a lu N symboles supplémentaires ; ça permet de limiter le parser au travail nécessaire pour traiter une grammaire LL(k) au lieu de lui demander de traiter une grammaire LL(k+N) alors que le cas ou on a besoin de k+N symboles pour faire un choix est rare).

Histoire de situer le contexte : la grammaire proposée dans la norme C99 est une grammaire formelle qui n'est pas une grammaire LR (pour autant que je sache), mais ce n'est pas pour autant une grammaire LL(1). Je soupçonne que c'est une grammaire LL(k) avec k grand mais je ne sais pas le prouver. Terence Parr a proposé une grammaire LL(*) pour ANTLR avec un seul prédicat (un tour de force, en fait ; mais les grammaires LL(*) sont bien plus permissives que les grammaires LL(k)) mais je n'utilise pas ANTLR - j'utilise Coco/R pour C# et cet outil est limité à l'apréciations de grammaires LL(1) avec prédicats.

Je pense (mais je n'en suis pas sûr) que la grammaire du C peut être en grande majorité parsée par un parseur LL(1)+prédicats. Il y a quelques points noirs (les déclarations de fonction, qui peuvent être tordues à souhait).

Question : est-ce que quelqu'un a déjà réalisé ce travail ? est-ce que quelqu'un, quelque part, a une grammaire LL(1) complète du C (avec ou sans prédicats) ?

Merci d'avance !