Nous travaillons sur l'analyse descendante dans une classe de conception de compilateur. Les exemples sont tous les langages Java. J'ai décidé d'essayer un langage fonctionnel simple pour le rendre intéressant, donc je suis allé avec PCF (see e.g. here). Cependant, je n'arrive pas à l'inclure dans une grammaire LL (1). Je pense que le problème est l'application de la fonction (c'est-à-dire la juxtaposition de deux expressions). Je ne reçois pas de réponses claires sur la façon de déterminer si c'est juste mon manque de compétence ou si c'est une langue pour laquelle il n'y a pas de grammaire LL (1), ou LL (k) d'ailleurs. Quelqu'un peut-il clarifier si je dois juste être plus intelligent ou s'il n'existe tout simplement pas une telle grammaire?Existe-t-il une grammaire LL (k) pour PCF?
Fondamentalement, ma version de PCF est quelque chose comme l'esquisse ci-dessous (majuscules sont non-terminaux, "//" commence commentaire). Je dis "quelque chose comme" parce que je ne suis pas marié à exactement cela et j'ai écrit de nombreuses variantes - je veux juste une variante raisonnable de PCF.
Notez que j'ai essayé le factorisation à gauche et la prise en compte de la préséance avec des non-terminaux intermédiaires.
Exp -> Const // integer and boolean literals, normal ops e.g. +
| if Exp then Exp else Exp
| lambda identifier dot Exp //lambda (function) abstraction
| Exp Exp // function application
| fix Exp // fixpoint operator (recursion)
Ce standard gauche élimination de récursion , voir [ici] (http://web.cs.wpi.edu/~kal/PLT/PLT4.1.2.html) par exemple. L'idée fondamentale est que la grammaire 'A -> A α | β' est équivalent à 'A -> β A '; A '-> ε | α A''. Vous devez généraliser à l'affaire avec plus de 'β's. – Bakuriu
@Bakuriu J'ai essayé d'éliminer la récursion gauche, mais peut-être que je ne l'ai fait que pour la récursion gauche * directe *. Je vais devoir revoir votre lien concernant la partie indirecte. Cependant, ce lien dit quelque chose à propos de la confusion de l'associativité, avec laquelle je luttais aussi. – joeA