CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Autogénération

saleGauss
saleGauss
Niveau 9
21 septembre 2007 à 23:24:14

Bonjour tout le monde !

Voila je souhaiterais quelques petites infos sur l´autogénération d´un compilateur.
En fait je voudrais que vous me racontiez cette magnifique histoire.

Si j´ai bien compris, on code(avec un lagage B) un compilo qui compilera du langage A , mais ce premier compilo représente le compilo de niveau 0.
A partir de ce compilo A il est alors possible d´écrire un compilateur A´ plus évolué que A, et dont la partie écrite en B est réécrite à l´aide du langage A puisque nous avons un compilo A qui marche.

Au final nous nous retrouvons donc avec un compilateur qui d´un point de vue global a été écris entièrement dans son propre langage.
Une sorte de définition récursive du langage lui même.
Quel tour de force magnifique.

Il parait aussi qu´un critère de qualité pour un compilateur est sa capacité à se compiler lui même sans erreur.

Bref, pouvez vous m´en dire plus sur ces thèmes là, qu´il s´agisse de notions scolaires ou d´expérience de chercheur vécu.
J´ai tenté les recherches google mais sans trop trop de succès.

Merci bien !

nb : Je m´y interesse uniquement par curiosité, donc ce n´est pas nécessaire de developper outre mesure vos explications

Fvirtman
Fvirtman
Niveau 10
22 septembre 2007 à 01:10:19

C´est vrai que c´est un sujet très intéressant !

D´ailleurs, a chaque fois qu´ils sortent un nouveau processeur, il parait que de faire un compilateur C est le plus simple pour celui ci : car c´est un langage relativement bas niveau, et pourtant ergonomique et suffisamment abstrait du systeme sur lequel on le fait tourner.

Pour le langage C, on peut envisager un premier compilateur simpliste :
- il ne permet pas grand chose et est tres rigide
- il n´otpmise rien
- sans réelle détection d´erreurs : si il y a des erreures, ça plante : au programmeur de se relire...
- mais son seul but sera de compiler un autre compilateur.

Et on écrira donc un autre compilateur, un petit peu plus puissant, en C, mais compilable par ce premier compilateur. Et on pourra a nouveau faire plusieurs couches, avec des compilateurs plus riches, qui détectent les erreurs, otpmisent, et permettent d´etre a l´aise dans le langage, de programmer de façon souple...

C´est vrai que c´est du vrai boulot de génie, et la question est beaucoup posée sur les forums ou les chats : "mais comment sont programmés les compilateurs ?" .

dnob700
dnob700
Niveau 10
22 septembre 2007 à 01:13:53

Ben, ton explication est assez claire (concise, mais claire), je ne vois pas trop ce que tu veux que l´on développe (pose peut-être des questions un peu plus précise).

On peut noter que parfois le problème n´est pas d´avoir un compilo pour un nouveau langage, mais pour une nouvelle machine (donc le changement se fait au niveau de l´exécutable généré et pas au niveau du langage pris en entrée).

godrik
godrik
Niveau 30
22 septembre 2007 à 11:18:34

de plus tu n´es pas obliger de compiler pour la plateforme actuelle. Il est fréquent de compiler a partir d´un PC sur architecture intel 32 bits, un binaire pour une architecture 64 bits (ou autre)

saleGauss
saleGauss
Niveau 9
22 septembre 2007 à 23:24:02

oui exactement comme les programmes qui tournent sur des machines embarqués qui on été codés sur des ordis "normaux" mais adaptés à leur futur environnement.

J´ai réellement hate de voir un peu d´info théorique en cours, de théorie des langages et d´implémentation d´un premier petit compilo.
Je m´étais lancé dans de la recherche de documentation sur le processus de compilation et sur le fonctionnement du langage machine mais c´était un peu trop tendu sans suivre un cours.

Meme un interpréteur depasse mon niveau actuel de connaissance.

Si vous avez des liens ou des polys du cours qui pourrait m´intéresser, ca serait sympa de me faire un signe.
Quelque chose dans le domaine de la conception de compilo, de l´élaboration de l´arbre de syntaxe abstrait ou de tout ce qui s´y rapproche.

Bonne soirée à vous tous.

ps : si ce topic peut continuer à vivre avec des commentaires sur les compilos, l´informatique théorique et ce genre de chose, c´est sympa.
Godrik, sachant que tu es (jeune) chercheur, as tu deja eu une expérience sur l´implémentation d´un compilo ?

dnob700
dnob700
Niveau 10
23 septembre 2007 à 01:02:09

Si tu t´intéresse à l´écriture de compilateur, je te conseillerai pour commencer, si tu ne l´as pas encore fait, de t´intéresser au langage Objective Caml, qui a été conçu pour cette tâche (mais qui reste un langage polyvalent extrêmement puissant).

Avec ce langage, toutes les tâches "mécaniques" (analyse syntaxique et lexicale), puis la compilation elle même (génération d´un arbre abstrait, manipulation de toute les structure que tu veux), seront bien plus simple et plus proche des algorithmes qui les décrivent (sans rien masquer de leurs intérêt).

Tu peut par exemple lire ça :
http://www.pps.jussieu.fr/Livres/ora/DA-OCAML/ qui est un peu ancien mais toujours correcte. Tu peut apprendre le langage avec les chapitres 1 à 4. Puis le chapitre 6 (tu peut zapper le 5) te permettra déjà de faire un petit interpréteur pour un langage BASIC. Ensuite le chapitre 11 (mais il faudrait lire les chapitre 7 et 8 avant) te présente les outils d´analyse lexicale et syntaxique qui sont la base de l´écriture de compilateur.

En parallèle si tu veux avoir des idée sur les compilo (je pense qu´il est interessant de pouvoir implémenter soi même ce genre de chose au fur et à mesure où tu les apprend, d´où l´idée df´apprendre le langage dans lequel tout les cours sont écrit), tu peut regarder ces deux poly :
http://www.enseignement.polytechnique.fr/profs/informatique/Luc.Maranget/compil/poly/
Que j´ai parcouru assez rapidement, mais qui semble assez bon

http://www.pps.jussieu.fr/~dicosmo/CourseNotes/Compilation/
Qui est écrit par un très bon prof (mais je n´ai pas lu le poly par contre, et il me semble qu´il utilise un logiciel pour simuler la machine cible qui n´est pas ou plus accessible, il faut voir).

godrik
godrik
Niveau 30
23 septembre 2007 à 10:21:38

J´ai jamais implémenté de compilo meme si je vois bien comment ca marche.
J´ai parcontre déjà implémenté un interpreteur brainfuck quand j´étais en DEUG, et ca se fait bien.

Pour compléter les références de Dnoc sur la compilation: Si tu t´interesse a la théorie des langages, je te conseille ´Introduction a la calculabilité´ de Pierre Wolper aux éditions Dunod. C´est un ouvrage d´informatique théorique qui décrit les grandes classes de langages. Certes a la base, cette théorie ne sert pas a créer de langage informatique mais a classer la difficulté des problemes algorithmique. Mais dans la théorie, une association est faite entre les problemes et les langages et donc des méthodes de reconnaissance de langage sont proposées.

saleGauss
saleGauss
Niveau 9
23 septembre 2007 à 21:28:48

Bonjour !

Pour répondre à dnob, oui je connais caml (light et ocaml) et c´est d´ailleurs un des langages que je préconise.
Effectivement, c´est un langage très utilisé dans le monde de la recherche.
La pensée foncitonnelle est, j´imagine, très puissante pour ce genre de taches.

Je visiterais en détail les liens que tu m´as mis, merci beaucoup.
J´irais aussi emprunter à ma BU la référence de Godrik, il me semble que je l´ai deja croisé dans les etagères.

Tiens d´ailleurs j´essayerais de voir tout ça dès demain.
Je vous remercie pour vos conseils, je reposterais pour vous dire comment j´ai digéré vos ouvrages et surrement aussi pour vous poser moultes questions :-).

Bonne soirée !

Fvirtman
Fvirtman
Niveau 10
24 septembre 2007 à 10:37:36

Si tu veux, c´est pas tout a fait dans le sujet, mais j´ai suivi un cours de "technologie des ordinateurs", ou on voit en détail comment marche de la RAM, un processeur, l´architecture en général, enfin des trucs assez intéressants qui aident a bien comprendre le très bas niveau (il y avait aussi des TP en assembleur, mais je n´ai pas gardé de traces de ces TP)
Par contre, le cours, je l´avais tout retapé avec mes mots a moi :)
Regarde mon site (ma carte), rubrique Fac/licence info/technologique des ordinateurs partie 1& 2.

saleGauss
saleGauss
Niveau 9
24 septembre 2007 à 17:46:01

merci Fifi, mais j´ai deja lu ce papier :-)
Et oui, j´ai deja fouillé ton site de fond en comble !
J´ai d´ailleurs trouvé ce papier asser interessant.
Donc j´en profite pour te remercier d´avoir mi ce doc en ligne, et surtout de l´avoir taper.

dès que j´ai qq questions sur mon info théorique je reposte.
Bonne journée à tous.

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Création de sites web
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment