Hello,
je dois inventer des exercices pour un cours de compilation.
Il faudrait un projet qui soit faisable quelques heures par semaines sur 7-8 semaines.
Est-ce que quelqu'un a une idée intéressante/ludique pour les étudiants plutôt que l'ultra classique: invention d'un language à 2 balles, écriture d'un compilateur pour ce langage.
Merci
# un truc simple ...
Posté par vincent LECOQ (site web personnel) . Évalué à 3.
Un language type C (du moins ses fonctionnalitées de base) avec fonctions, boucles, tests et tout ça ...
le compilateur doit generer un fichier assembleur qui correspond au programme (language assembleur fictif, instructions de base comme sauts, tests, calls, interruptions etc ... une ou deux douzaines d'instructions seraient surement deja plus que necessaire).
le tout associé a un assembleur maison lui aussi qui convertit le fichier assembleur en bytecode.
Reste a écrire une machine virtuelle pour executer tout ca, la VM dispose aussi d'un jeu d'interruptions genre BIOS qui permet d'appeler des fonctions interessantes (comme afficher une image depuis une chaine passée sur la pile ou un truc du genre) (le "BIOS" peut etre fourni par le sujet, ca evitera de deborder trop loin hors de la compilation)
Ca nous fait donc deux deux organes de compilation qui traitent de deux languages a la sémantique différente, et un automate d'exécution.
(j'ai eu a faire un projet de ce type en licence, en gros deux nuits blanches pour faire un truc gruiiiik mais qui marchait plutot bien)
[^] # Re: un truc simple ...
Posté par Guillaume Knispel . Évalué à 1.
J'ai deja eu a faire un assembleur éditeur de lien MIPS et un compilo : c'etait deux projets assez long (bien que chacuns bien plus complet que ce que tu décris).
Et puis ca rentre quand meme un petit peu dans "l'ultra classique: invention d'un language à 2 balles, écriture d'un compilateur pour ce langage." que l'auteur du journal ne souhaite pas :p
[^] # Re: un truc simple ...
Posté par Obsidian . Évalué à 3.
[^] # Re: un truc simple ...
Posté par spongurex . Évalué à 1.
Ça se fait bien (environs 6h de boulot) et c'est plutôt intéressant de voir comment fonctionnent nos machines (x86) même si je sais que leurs fonctionnement est quand même plus complexe.
A propos d'un cours de compilation, je ne vois pas ce que tu peux vraiment faire d'original. De toute façon, le départ est un langage, la finalité est un code exécutable. Evidement tu peux prendre ce que tu veux, ex : convertir un fichier LaTeX en un fichier PDF. (c'est plus un traducteur qu'un compilateur ça)
[^] # Re: un truc simple ...
Posté par TImaniac (site web personnel) . Évalué à 2.
# hmmm
Posté par doublehp (site web personnel) . Évalué à 3.
ce sont tous des projets qui se codent en 2 a 6h suivant le viveau de logique de l eleve, mais ca donne pas mal de fil a retordre.
Apres il y as les trucs que je n ai pas encore code: un simulateur de fourmiliere: 100 fourmies se deplacent sur une surface de 1000x1000; sur cette surface il y as un morceau de sucre sur chaque case dont les coordonnes modulo 10 sont nulles: 10x10, 10x20, 10x30, 20x10 ... quand une fourmie rencontre un morceau de sucre, elle le prend, et continues la balade; quand elle rencontre un second morceau de sucre, elle laisse le premier avec le second, et se casse ailleurs.
Le but est de voir la colonie evoluer en temps reel avec une GUI, et d etudier combien de temps il faut pour ne former plus qu un gros tas de sucre.
il s agit en fait d une simulation theorique d un exercice classique de robotique: 10 robots avec des pions dans un carre, combien de temps faut il au robot pour regroupper les pions.
La tu as au moins de l IA , GUI, et multitasking, et pourquoi pas introduire un peu d objet ou le client/server quelque part ...
Enfin, le plus dans tous ces projets, c est de faire ecrire des makefile generiques pour compilation automatique de gros projets:
projet: toutes les targets dans le Makefile, un README, un dossier src et un dossier doc
un make doit par default construire a la fois les docs (en latex) et les binaires
le dossier src contiendra un ou des dossier libs; le make devra se propager recursivement dans tous les sous dossiers ... mais le Makefile ne devra PAS contenir en dur la liste des dossier de recursivite ni la liste des fichiers sources a compiler: tout doit etre dynamique
Tu trouvera de tels Makefiles dans http://doublehp.ath.cx/tmp/part1/(...) (le dossier sera detruit d ici 4j). Note que celui dans part1/lib ne contient aucune target, mais sais forwarder les requettes recursivement dans les sous libs ...
( avec arret de la compilation en cas d erreur )
[^] # Re: hmmm
Posté par Guillaume Knispel . Évalué à 5.
[^] # Re: hmmm
Posté par Sebastien . Évalué à 3.
Pour la partie sur les Makefiles, il y existe deja un outil qui fait ca (plutot bien je trouve) : Configuration Management Tool (CMT[1] pour les intimes).
Il gere les dependances cycliques entre differents paquets d'un gros projet.
On peut definir et appliquer des actions (genre une action doc, une action check pour les tests unitaires,...)
On peut aussi lui passer n'importe quelle commande shell qui sera appliquee dans tous les paquets qui dependent d'un certain paquet.
Et il aussi interface a un RCM (CVS pour l'instant mais SVN pointe le bout de son nez).
Last but not least il est sous CeCILL et sa maintenance est garantie pour 20 ans (le temps que les experiences de physique des particules qui l'utilisent s'arretent de leur belle mort).
Code avec vos sous (enfin ceux qui paient des impots ;)
[1] CMT http://www.cmtsite.org(...)
[^] # Re: hmmm
Posté par Wawet76 . Évalué à 6.
Je pense ce serait une bonne chose de passer quelques heures à expliquer aux élèves en info les bases de make, ant et cvs, puis d'exiger que tous les projets soient "rendu" sous forme d'un composant à checkahouter.
[^] # Re: hmmm
Posté par doublehp (site web personnel) . Évalué à 2.
Je migre peu a peu vers les outils automatiques; j utilise les Makefile depuis 1 an; je vais bientot passer aux ./configure ... et peut etre l an prochain a automake/autoconf :)
Mais se former tout seul, c est trop la lutte.
[^] # Re: hmmm
Posté par LeMagicien Garcimore . Évalué à 3.
Je me souviens que mon sujet de compilation était assez interessant : on avait un compilateur pour un langage fictif genre java (en simplifié) et on devait lui ajouter des fonctionnalités manquantes. Par exemple le support des boucles for, la verification des bornes lors d'un accés à une table, les methodes virtuelles, ... On avait une liste d'amélioration possible et on devait en implementer 3 ou 4 au minimum. Ca permet de régler la quantité de travail demandé et de travailler sur un truc assez complexe, proche de la "réalité" (et pas simplement sur une évaluateur d'expressions arithmétiques). Le problème c'est que ça demande une masse de travail enorme pour le prof ou le chargé de demo et que le niveau des étudiants doit être assez élevé.
Sinon, pour eviter de les deborder avec des langages comme le c ou le c++ (je sors d'une école où le simple fait de prononcer ces noms faisait flipper la moitié de la promo (j'étais dans l'autre moitié)), tu peux aller voir du coté d'Antlr : www.antlr.org , je l'utilise intensivement en ce moment et c'est du pur bonheur ! Il peut générer des parser en java, c# ou c++ (et peut être python aussi).
[^] # Re: hmmm
Posté par doublehp (site web personnel) . Évalué à 1.
[^] # Re: hmmm
Posté par Matthieu Moy (site web personnel) . Évalué à 4.
Un conseil: apprends d'abord autoconf, et après, tu regarderas du coté des ./configure, tu auras une bonne surprise (hint: le ./configure est généré automatiquement par autoconf ;-)
[^] # Re: hmmm
Posté par Philippe F (site web personnel) . Évalué à 2.
# interpreteur XSLT ?
Posté par Mouns (site web personnel) . Évalué à 3.
- qq manipulation autour de XML & XSLT
- parseur iteratif
- parseur recursif
- modelisation selon DOM
- recherche dans un document XML : XPath
- chargement dynamique de composant du language
sans entrer dans des problemes lourds sous jacents, cela peut etre un bon exercice surtout qu'il y a la libxml2 et la libxslt qui peuvent servir de modele.
meme si cela à l'air compliqué, je ne parle aucunement de faire une version complete des specs XML/DOM/XPATH/XSLT mais juste d'un truc de demonstration pour exposer les bases.
[^] # Re: interpreteur XSLT ?
Posté par grafit . Évalué à 4.
ou demander directement à Daniel Veillard si il a en tête un projet qui puisse cadrer dans les objectifs du cours. Comme ca en plus, c'est du code utile ! http://xmlsoft.org/(...)
De facon général, je pense que les profs devraient participer plus au projets open source,
"Bonjour, j'ai x élèves pendant x temps, voici leurs compétances, voici les contraintes du cours (contenu), est-ce que vous auriez un projet qui puisse coller ?"
Bien encadré, il y a surement moyen de faire avancer le schmilblick.
# Commentaire supprimé
Posté par Anonyme . Évalué à 2.
Ce commentaire a été supprimé par l’équipe de modération.
[^] # Re: Une idée
Posté par Matthieu Moy (site web personnel) . Évalué à 2.
# Tigrou?
Posté par Larry Cow . Évalué à 5.
Ce langage est décrit dans les livres de la série "Modern Compiler Implementation in <insert your favorite language here>". Pas besoin d'aller jusqu'au bout, leur faire participer aux grandes étapes de l'écriture du compilateur devrait déjà être très formateur.
Autrement, un cours de compilation où l'on n'écrit pas (de près ou de loin) un compilateur ... j'ai du mal. Si c'est le temps qui te manque, tu peux te limiter aux phases de parsing, m'enfin bon.
# En espérant aider
Posté par FrancoD . Évalué à 2.
Les TPs étaient sous forme de notions a comprendre, et d' "écriture" du compilateurs (c'etait sous la forme de programme 'troué', on devait completer certaines parties).
On avait commencé par la parti d'affichage (la tortu et les fonctions), puis ecriture du compilo (analyseur lexical puis syntaxique), puis mettre un "sens" et enfin "generation de code" et "machine virtuelle".
Bon comme on avait pas un bon niveau, l'idée de faire un "gros" projet via un texte a trou était rigolo.
# Manipulation d'informations personnelles
Posté par bobert . Évalué à 4.
Exemples (au hasard):
- lister tous les rdv entre maintenant et demain:
list all rdv starting between now and ( tomorrow morning )
- lister toutes les tâches de priorité >=4
list all tasks having priority >= 4
[^] # Re: Manipulation d'informations personnelles
Posté par Matthieu Moy (site web personnel) . Évalué à 1.
# Parrot ?
Posté par Nicolas Boulay (site web personnel) . Évalué à 3.
Sois compiler un langage dessus, soit rajouter des "instructions assembleur", je pensais à des instructions SIMD, (genre 2 double ou 4 float). Ainsi certaine boucle de calcul perl pourrait en bénéficier.
"La première sécurité est la liberté"
# marrant je viens d'en faire un
Posté par Staz . Évalué à 4.
Peut-être que pour toi qui est expérimenté cela semble barbant mais moi, n'ayant jamais écris de compilateur auparavant (et je suppose fortement que tes élèves sont dans le même ca) j'ai trouvé cela passionant.
Bien sur tu pourrait faire écrire à tes étudiants un quelcquonque parser de document vers un autre format, mais un compilateur sonne beaucoup mieux dans l'oreille d'un étudiant et leur donnera l'impression d'avoir réalisé quelque chose d'important.
Voila le projet que nous avons du réaliser : http://www.ulb.ac.be/di/ssd/ggeeraer/lg/enonceProjet1.ps(...)
et la page des TP : http://www.ulb.ac.be/di/ssd/ggeeraer/lg/(...)
note : ce n'est que sur le 1er projet, on utilise une grammaire LL a rendre LL1 et il faut ecrire les analyseurs syntaxique et lexical à la main. Le second portera sur une grammaire LR et l'utilisation de Lex et Yacc (Flex et Bison)
# Une alternative à IASL?
Posté par plagiats . Évalué à 3.
http://linuxfr.org/tips/263.html(...)
http://www.intel.com/technology/iapc/acpi/downloads.htm(...)
[^] # Re: Une alternative à IASL?
Posté par Nicolas Schoonbroodt . Évalué à 2.
Bon après certains accepteraient de la faire, je suppose.
[^] # Re: Une alternative à IASL?
Posté par Matthieu Moy (site web personnel) . Évalué à 3.
[^] # Re: Une alternative à IASL?
Posté par Joris Dedieu (site web personnel) . Évalué à 1.
Tu peux aussi regarder du côté de Free Pascal Compiler.
Ils sont en plein debugage de la version 2
http://www.freepascal.org(...)
# Idee
Posté par Philippe F (site web personnel) . Évalué à 2.
Sinon, quitte a ecrire un langage, fait leur ecrire un langage qui leur apprend aussi des notions de qualite logicielle. Genre un langage prouvable, ou bien un langage a la eiffel, avec pre et post-assertion, ou bien un langage comme Ada, ou tous les intervalles de donnes sont parfaitement controlle.
L'idee etant de trouver un langage avec des caracteristiques plus robuste que la moyenne de ceux qu'ils manipulent (C etant le pire).
# Parlons nature...
Posté par Julien Sagnard . Évalué à 1.
Ca ce base sur un langage dans le genre :
Et ça fait pousser un arbre, une fougère, de l'herbe ou tout autre végétaux magnifiques en 2D. En plus tu peux mettre en question bonus de passer l'appli en 3D, comme ça même tes meilleurs élèves aurons de quoi s'occuper ;)
Sinon, tu peux jeter un oeil sur la fourmie de lancton, le jeu de la vie de Conway ou la simulation d'épidemie ou de feu.
Un exemple pour les feux de foret:
Si tu veux plus de renseignement, envoie moi un mail, j'ai les sources sous la main.
# port de gcc
Posté par Pierre . Évalué à 2.
http://sourceforge.net/projects/tic54x-gcc(...)
le port de gcc pour que l'on puisse développer tranquillement pour le neuros sous linux:
http://open.neurosaudio.com/(...)
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.