Mini-compilateur

Soyez le premier à donner votre avis sur cette source.

Vue 29 845 fois - Téléchargée 5 776 fois

Description

Ce code a été écrit dans le cadre d'un cours sur les langagues et compilateur. Il contient un analyseur lexical qui lit dans un fichier d'entrée et renvoit une suite d'unité lexical représentant le fichier source. Il y a ensuite une analyseur syntaxique qui lit une grammaire LL(1) dans le fichier grammar.txt dans le dossier syntax et qui génère un arbre syntaxique. Cette arbre syntaxique est ensuite traduit dans une représentation intermédiaire du code à l'aide de la classe SLIPGenerator. Enfin, à partir de l'arbre en représentation, on génère le code final, code qui ressemble assez à de l'assembleur. En fait, ce code s'exécute sur une petite machine virtuelle programmée en java mais, étant donné que ce n'est pas moi qui l'ai codée, je ne l'inclus pas dans le code. Le projet contient aussi une classe qui permet de vérifier qu'une grammaire est bien LL(1).

Le langage en lui même est assez basique avec un syntaxe proche de Java (très proche meme :)). Il permet quand même de faire des appels de fonctions, des boucles, des tests (imbriquées éventuellement), des fonctions récursives. Il permet aussi de gérer des objets très basiques qui fonctionne en utilisant un niveau (Pour avoir une meilleur idée de ce qu'on peut faire avec des objets, voir le dossier testSLIP).

Ce projet est fonctionnel mais il doit encore y avoir quelques problèmes à gauche et à droite surtout dans la partie de la traduction de l'arbre syntaxique en arbre en représentation interne (la génération de code est loin d'être optimale).

Enfin, pour ceux qui se demanderait ce qui signifie 'SLIP', c'est l'abbréviation pour "Simple Language with Integer and Pointer".

Si vous avez des questions -> commentaires :)

Conclusion :


BUG: aucun ( en espérant ne pas avoir à mettre à jour cette partie :p )

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

SVP quelle est la grammaire de ce mini-compilateur!!!!!!
saselma
Messages postés
1
Date d'inscription
lundi 26 novembre 2012
Statut
Membre
Dernière intervention
2 décembre 2012

code qui segment text Arabe
Merci
nihed0nadou
Messages postés
1
Date d'inscription
samedi 27 novembre 2010
Statut
Membre
Dernière intervention
1 décembre 2010

slt..
merci cé un très bon travaille
j'ai exactement que te fait comme un mini projet d'étude ..svp comment on a ajout le package a l'éclipce ?? et si tu peut et tu veut je veut te qstioné sure qlq point ..j'attends
Bel0
Messages postés
71
Date d'inscription
mercredi 14 avril 2004
Statut
Membre
Dernière intervention
14 septembre 2007

Par exemple, prenons 2 définitions:
# <FULLNAME> ::= 'identifier' <FULLNAME-S>
# <FULLNAME-S> ::= 'lambda' | '#' 'cst'

Ca veut dire qu'une grammaire correcte pour "FULLNAME" est:
'identifier'#cst
'identifier'

En prenant la grammaire, le premier cas est simple à comprendre. Le 2ème cas signifie 'identifier' suivi de rien. Le rien est symbolisé par 'lambda'. En espérant que ce soit plus clair.
1386
Messages postés
1
Date d'inscription
mardi 5 février 2013
Statut
Membre
Dernière intervention
5 juin 2010

<var> ::= 'id' | 'lambda'
cad var peut etre representer par rien

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.