Programmation d'un interpréteur - problèmes de syntaxe
Dernière réponse : dans Programmation
Bonjour,
voilà, je dois programmer un interpréteur en Objective Caml, le langage à interpréter est en partie dérivé de Caml avce plus de contraintes sur les types.
Mon problème est que je dois écrire les règles syntaxiques pour l'analyseur syntaxique (CamlYacc, identique au Yacc de C) et que je bloque sur les règles correspondants au:
let ident = valeur in expression;;
et
let ident = valeur;;
Il faut préciser que même si j'ai l'air de tout comprendre, c'est pas vrai. Je ne sais pas où je pourrais trouver les règles de syntaxe de Caml par exemple.
On m'a dit d'aller voir dans le source mais je rame pour les trouver, si quelqu'un pouvait m'indiquer où chercher...
voilà, je dois programmer un interpréteur en Objective Caml, le langage à interpréter est en partie dérivé de Caml avce plus de contraintes sur les types.
Mon problème est que je dois écrire les règles syntaxiques pour l'analyseur syntaxique (CamlYacc, identique au Yacc de C) et que je bloque sur les règles correspondants au:
let ident = valeur in expression;;
et
let ident = valeur;;
Il faut préciser que même si j'ai l'air de tout comprendre, c'est pas vrai. Je ne sais pas où je pourrais trouver les règles de syntaxe de Caml par exemple.
On m'a dit d'aller voir dans le source mais je rame pour les trouver, si quelqu'un pouvait m'indiquer où chercher...
Autres pages sur : programmation interpreteur problemes syntaxe
Lassé par la pub ? Créez un compte
mooon a écritbon ben voilà
g réussi à avancer un peu.
mon pb a été résolu par les points d'entrée
g réussi à avancer un peu.
mon pb a été résolu par les points d'entrée
Ce qu'il te faut, c'est une bonne couche de théorie des langages :
1. automates d'état finis (c'est pompeux comme nom mais la base est extrèmement simple)
2. grammaire : comment définir une grammaire avec un automate.
Tous les compilos sont écrits comme ça. Je ne connais pas de meilleurs moyen.
JAVA Alive a écrit
Ce qu'il te faut, c'est une bonne couche de théorie des langages :
1. automates d'état finis (c'est pompeux comme nom mais la base est extrèmement simple)
2. grammaire : comment définir une grammaire avec un automate.
Tous les compilos sont écrits comme ça. Je ne connais pas de meilleurs moyen.
Ce qu'il te faut, c'est une bonne couche de théorie des langages :
1. automates d'état finis (c'est pompeux comme nom mais la base est extrèmement simple)
2. grammaire : comment définir une grammaire avec un automate.
Tous les compilos sont écrits comme ça. Je ne connais pas de meilleurs moyen.
Tout d'abord, ce n'est pas un compilateur mais un interpréteur.
Ensuite, j'ai une grammaire complètement définie. L'étape des automates n'est pas nécessaire.
Mon seul problème est que pour pouvoir utiliser ocmlyacc, il faut que la grammaire utilisée par le parser soit LALR(1), c'est une propriété du langage décrit.
Il se trouve qu'avec let et let..in, il ya des conflits à ce niveau là.
Mais maintenant, c'est résolu.
Merci quand même
PS: la théorie du langage, les automates finis, les automates à pile, et tout ça j'adore
mooon a écrit
Tout d'abord, ce n'est pas un compilateur mais un interpréteur.
Ensuite, j'ai une grammaire complètement définie. L'étape des automates n'est pas nécessaire.
Mon seul problème est que pour pouvoir utiliser ocmlyacc, il faut que la grammaire utilisée par le parser soit LALR(1), c'est une propriété du langage décrit.
Il se trouve qu'avec let et let..in, il ya des conflits à ce niveau là.
Mais maintenant, c'est résolu.
Merci quand même
PS: la théorie du langage, les automates finis, les automates à pile, et tout ça j'adore
Tout d'abord, ce n'est pas un compilateur mais un interpréteur.
Ensuite, j'ai une grammaire complètement définie. L'étape des automates n'est pas nécessaire.
Mon seul problème est que pour pouvoir utiliser ocmlyacc, il faut que la grammaire utilisée par le parser soit LALR(1), c'est une propriété du langage décrit.
Il se trouve qu'avec let et let..in, il ya des conflits à ce niveau là.
Mais maintenant, c'est résolu.
Merci quand même
PS: la théorie du langage, les automates finis, les automates à pile, et tout ça j'adore
Juste pour causer du sujet, puisque tu as une solution et que t'as l'air d'avoir déjà du bagage :
Tu peux très bien faire un interpréteur en surcouche d'un AEF. L'AEF ne servira qu'à la validation du code.
Il est aussi possible de faire de l'interprété à la mode JAVA ou pcode. AEF sert alors à écrire un traducteur vers un code facile à interpréter. J'en d'écrit l'interêt à la fin de mon post.
ocmlyacc, je connais pas, alors j'en parlerai pas mais, dans les cas que j'ai rencontré personnellement, j'ai remarqué qu'il est plus simple et plus fiable d'écrire son propre compilo/traducteur/interpréteur à partir du momment ou on connais un minimum la théorie des langages. Le "let in" est par exemple très simple à faire. Au niveau grammatical, c'est bidon, au niveau interpréteur il suffit de gérer les affectation avec des fonctions (je détaille l'appel de fonction plus tard) qui feront l'affectaction et, éventuellement, l'évaluation de l'expression et la validation de la valeur affectée.
Pour l'appel de fonctions, je le seul moyen qui me vient à l'esprit est le goto. Simple à gérer.
Par contre, je pense que dans le cas d'un langage interprété, il est très intéressant de passer par une pahse de traduction. Je ne vois pas comment définir la notion de fonctions, par exemple, dans un langage qui s'interprèterait directement.
Avec un traducteur + interpréteur de code traduit, on a tous les avantages de java : possibilité d'écrire plusieurs interpréteurs (montée de version ou multi platte-forme), capacités de branchement sur des programmes externes écrits dans le même langage très puissantes (plus besoin de mechanismes à la DLL, capacité d'introspection, etc). De plus, tu as tout de même une validation grammaticale avant toute exécution possible ce qui évite les fameux syntax error du basic au moment de l'excution.
Il faut savoir que c'est un projet universitaire.
Je dois programmer en ObjectiveCaml et donc utiliser ocamlyacc qui est à OCaml ce que yacc est au C.
Ensuite, le langage à interpréter ne comporte aucun type de base et fonctionne sur le modèle du lambda calcul.
Il s'agit principalement de créer un "typeur" particulier. Il doit valider des déclarations de types, ces mêmes types devant respecter une structure particulière, les isomorphismes inductifs.
Je dois programmer en ObjectiveCaml et donc utiliser ocamlyacc qui est à OCaml ce que yacc est au C.
Ensuite, le langage à interpréter ne comporte aucun type de base et fonctionne sur le modèle du lambda calcul.
Il s'agit principalement de créer un "typeur" particulier. Il doit valider des déclarations de types, ces mêmes types devant respecter une structure particulière, les isomorphismes inductifs.
salut à tous, ça ce n'est pas une réponse mais une question a propos de ce sujet et puisque vous avez aussi de l'experience et une trés bonne connaissance dans ce domaine.
bon je dois programmé LALR(1) en c++pour une analyse syntaxique du langage pascal, au début j'ai cru que c'est bon j'ai reussi à généré la table d'action pour une petite grammaire, mais quand j'ai changé la grammaire (seulement pour une expression arithmétique) il n'arrete pas de bouclé, et quand j'ajoute une procedure pour verifier si une etat existe deja ou pas il se bloc.
je vais entrer dans la 4eme semaine à faire ce tp la semaine prochaine sera la consultation je suis trés enervé je sais pas quoi faire, j'ai relevé le défi de programmé lalr par ce que les autres ont utilisé le yacc, svp donnez moi vos conseils meme si vous connaissez un algorithme de génération des états pour l'automate (par ce que dans les autres étapes comme regroupement des états de lr(1) vers lalr(1), et la table d'actions marchent trés bien) vous pouvez me le donnée ou un doc...
merci d'avoir la patiente de lire tous ça
bon je dois programmé LALR(1) en c++pour une analyse syntaxique du langage pascal, au début j'ai cru que c'est bon j'ai reussi à généré la table d'action pour une petite grammaire, mais quand j'ai changé la grammaire (seulement pour une expression arithmétique) il n'arrete pas de bouclé, et quand j'ajoute une procedure pour verifier si une etat existe deja ou pas il se bloc.
je vais entrer dans la 4eme semaine à faire ce tp la semaine prochaine sera la consultation je suis trés enervé je sais pas quoi faire, j'ai relevé le défi de programmé lalr par ce que les autres ont utilisé le yacc, svp donnez moi vos conseils meme si vous connaissez un algorithme de génération des états pour l'automate (par ce que dans les autres étapes comme regroupement des états de lr(1) vers lalr(1), et la table d'actions marchent trés bien) vous pouvez me le donnée ou un doc...
merci d'avoir la patiente de lire tous ça
Lassé par la pub ? Créez un compte
- Contenus similaires :
Tags :