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

Créer interpréteur/compilateur

kaxes
kaxes
Niveau 4
09 mars 2010 à 17:23:21

Bonjour , je voudrais savoir comment l'on fait pour créer un langage puis créer un interpréteur ou un compilateur ?

je cherche des tuto
Quel logiciels prendre ?

Ps :J'avoue que je voudrais créer un langage mais je voudrais d'abord savoir comment procédé

Bunyan
Bunyan
Niveau 17
09 mars 2010 à 17:34:20

ftp://https://www.jeuxvideo.com//ftp-developpez.com/general/cours/PolyCompil.pdf

Bon courage pour tout comprendre, assimiler et mettre en oeuvre :)

chris_27
chris_27
Niveau 10
09 mars 2010 à 17:48:39

Je tiens à préciser (surtout à la vue de la quantité de C qu'il y a dans le poly cité ci-dessus) que des langages avec des traits fonctionnels sont beaucoup plus adaptés pour faire des interpréteurs.
Je pense notamment à Ocaml, qui fournit ses propres versions de lex et yacc que je trouve facile à utiliser.

Pour les compilateurs, le coté fonctionnel est aussi terriblement pratique … sauf qu'il ne s'agit pas de pondre la sortie :rire2: .

godrik
godrik
Niveau 30
09 mars 2010 à 17:55:23

Je pense qu'un bon exercice pour comprendre comment cela peut marcher est d'ecrire une calculatrice qui prends une expression en entre comme : 3+4*2 et fournit le resultat. Apres on peut essayer de rafiner en mettant des variables dedans comme x+y*3 et fournir les valeurs de x et y separement.

kaxes
kaxes
Niveau 4
09 mars 2010 à 17:55:45

Comment faut-il faire utiliser Ocaml ?

Bunyan
Bunyan
Niveau 17
09 mars 2010 à 18:07:54

Au niveau du poly, je l'ai fournis car c'est le seul que je connaissais ^^'
Je n'ai pas vu de théorie et langage ni de compilation en C, mais en Ruby, qui est assez agile de ce coté là je trouve :)

kaxes
kaxes
Niveau 4
09 mars 2010 à 19:11:57

je voudrais aussi savoir comment on fait pour faire la "grammaire" de son langage

faut-il un logiciel ?

Si possible pouvez vous me donner tous les logiciel qu'il fait avoir pour pouvoir créer son langage .

godrik
godrik
Niveau 30
09 mars 2010 à 19:34:39

ca a deja ete fait. Les gens utilisent des lexeurs comme lex, yacc et bison. Ca peut etre plus facil a ecrire en caml qu'en C.

Apres, je n'ai pas dit que c'etait facil a faire.

guyver2
guyver2
Niveau 10
09 mars 2010 à 20:22:08

je voudrais aussi savoir comment on fait pour faire la "grammaire" de son langage
faut-il un logiciel ?

Si tu veux que ce soit TON langage il va falloir que tu définisses toi même la grammaire du langage. C'est a dire qu'il va falloir que tu décides comment donner du sens a ce qui est écrit, comment comprendre un texte correctement écrit et comment rejeter ce qui ne correspond pas a une syntaxe correcte. Je doute qu'il y ai des logiciel pour ça, il vaut sans doute mieux le faire a la main (papier + crayon) puis retranscrire ta syntaxe et tes règles avec lex/yacc.

En première année de master j'avais fait un compilateur qui reconnaissait un petit sous-ensemble du C (même pas de fonction...) et sortait du bytecode java en lex/yacc/Ocaml et ça n'a rien de trivial. (néanmoins j'aurais pu être plus attentif)

Bon courrage

kaxes
kaxes
Niveau 4
09 mars 2010 à 20:41:31

Donc si j'ai bien compris il faut que je crée ma "grammaire"
après je télécharge lex/yacc j'écris ma "grammaire" et après je fais quoi ?

chris_27
chris_27
Niveau 10
09 mars 2010 à 20:47:56

La première chose c'est de définir ce que doit permettre ton langage. Cela impacte beaucoup sur le langage lui-même.

Petite citation dérivée des commentaires sur fetchmail dans "La cathédrale et le bazar" :
« Si la langage n'a pas besoin d'être Turing-complet, faites un langage le plus proche possible de l'anglais. »

saleGauss
saleGauss
Niveau 9
09 mars 2010 à 21:03:19

Excusez moi de vous interrompre, mais j'ai comme l'impression que kaxes ne possèdes pas les bases requises pour ce genre de taches.

Au vu des questions
"quels logiciels utiliser ?"
"il faut que je crée ma "grammaire"
après je télécharge lex/yacc j'écris ma "grammaire" et après je fais quoi ? "
Je pense qu'il s'agit de quelqu'un qui ne possède pas des bases suffisantes en informatique en général.
Il va falloir d'abord apprendre et comprendre comment on crée des programmes, voir un peu d'architecture des machines élémentaires, puis programmer un certain temps et de manière plus avancée en impératif, en fonctionnel...
Enfin, s'intéresser à la théorie des langages :

Langages[langages régulier, hors contextes, dépendants au contexte...]
Automates[automates à états finis, automates à piles, machines de Turing]
Lemme de l'Etoile, Equation d'Arden
Grammaires[grammaires linéaires à droite, grammaires en général..]
Et encore à l'architecture des machines si tu veux aller jusqu'à la génération de code et générer du code efficace.

Il y a un sérieux paquet de choses théoriques à comprendre pour pouvoir faire convenablement les choses.

Quelqu'un qui veut sérieusement faire ce genre de choses ne poserait pas de telles questions. Il saurait s'y dans quel ordre s'y prendre.
C'est un peu comme si je demandais un mon ancien prof de physique "mais, comment je pourrais faire pour ecrire la théorie de la grande unification" sans connaitre les trois plans de la physique...

Mais ce n'est que mon avis...
N'y voyez rien de condescendant, je trouve juste que passer un poly sur la compilation ou faire référence aux langages Turing complet sur de telles questions, c'est un peu rigolo :D

saleGauss
saleGauss
Niveau 9
09 mars 2010 à 21:04:36

NB : lorsque je parlais des trois plans de la physique, je faisais référence à la mécanique Newtonienne, la physique quantique, et la physique relativiste.

kaxes
kaxes
Niveau 4
09 mars 2010 à 21:21:45

Merci , pour ta réponse mais j'ai précisé que je voulais savoir comment procédé et après voir si je pourrais ,mais ta réponse m'as servi donc encore merci!

saleGauss
saleGauss
Niveau 9
09 mars 2010 à 21:53:56

bah avec plaisir. je pense que là tu as bonnes pistes pour appréhender convenablement tout ça.

Prends bien ton temps, et fais les choses étapes par étapes.
La compréhension vaut tout, et la compréhension des choses simples vaut plus que de l'à peu près sur des problèmes compliqués.

Mon petit conseil de la fin :
1/ Je ne sais pas si tu as déjà programmé. Si ce n'est pas le cas, je te proposes de commencer avec un langage tel Visual Basic. Il est disponible sous Windows exclusivement, et une version gratuite de l'IDE complet est disponible : recherches Visual Studio Express sur ton moteur de recherches favori.
Et il te suffit de prendre Visual Basic.

Pourquoi je conseille ce langage ou un équivalent pour débuter ?
Parce que sa syntaxe de base est assez simple mais proche de nombreux langages impératifs.
Parce qu'il permet de faire des choses plus jolies et plus "graphiques" que du C dans une console "command.exe de windows" ou "terminal linux".
Personnellement, quand je découvrais la programmation, ça m'avait permit de comprendre pas mal de petites choses en algo de base (conditions, boucles, fonctions...)
Avec ce langage, j'avais rapidement pu créer des fenetres qui demandait à l'utilisateur des choses, des boites de dialogues pour les erreurs, etc...

2/ D'ici quelques semaines, quand tu auras ces bases (si tu ne les avait pas), tu vas attaquer la phase autrement plus difficle : comprendre comment marche en gros un systême (de préference UNIX [regardes du coté de Linux]. Tu regarderas la notion de processus, de mémoire virtuelle, ...
Regardes avec attention la chaine de compilation (compilations, fichiers objets, edition des liens, code executable, image d'un processus)
Et en parallèle, jettes un coup d'oeil à de l'architecture des machines (de base).
Et en parallèle encore, essaye le langage C.

A ce moment là précis, une vision à peu près complete d'un systeme t'apparaitra.
Il te manquera encore de nombreuses briques pour tout comprendre, mais plein de choses seront plus claires.

Voila un bon programme je trouve ! :p

PS : J'ai essayé de mettre le plus de mots clefs cherchables sur google dans mes posts, si tu veux en savoir plus.

dnob700
dnob700
Niveau 10
09 mars 2010 à 21:58:39

Je ne suis pas tout à fait d'accord avec ce qui a été dit. J'ai écrit mes premiers "compilateurs" et interpréteurs bien avant de connaître quoi que ce soit de sérieux à la théorie des langages (et même pour faire quelque chose de sérieux, je pense qu'une bonne partie de la liste de saleGauss n'est pas nécessaire).

Il s'agissait de langage simple, c'est pour ça que j'ai pu le faire, mais des langages turing complet tout de même. L'un d'eux était par exemple une extension des langage de programmation "polonaise inverse" que l'on trouvait dans les vieille calculatrice HP : une espèce d'assembleur pour une machine à pile. La grammaire est quasiment inexistante donc je parsais ça "à la main" en Visual Basic, puis je traduisais le code en "binaire" (juste une représentation lisible par un programme du code) et j'interprétais ça en C avec une machine virtuelle à pile qui effectuait les opérations.

Bref, tout ça pour dire, qu'à condition de définir un langage suffisamment simple (au moins pour commencer), il n'y a pas besoin d'être grand savant pour faire un projet de ce type. Et la connaissance d'un langage de programmation quel qu'il soit peut suffire.

saleGauss
saleGauss
Niveau 9
09 mars 2010 à 22:12:01

Je trouve qu'il est plus approprié de voir les choses dans le bon ordre...
Souvent cela permet de gagner en temps et en compréhension...

Mais ce n'est que mon avis, et c'est sur que ca se discute...
Mon avis s'est essentiellement forgé en regardant des gars de ma promo.
Et bien quand il leur manque trop de notions, c'est à coup de "hé machin tu peux m'aider ?", de longs zieutages sur le nets, de code rafistolé et rustiné pour compbler "le cas qui marche pas pour la valeur 25"...
Et bien souvent, le prof doit filer son coût de main.
Et au final, l'étudiant (étudiant ?) regarde tout content tourner du code qu'il comprend à peine, et qui mettent en avant des concepts qui lui échappent totalement.
Mon dernier exemple en date ?
En écrivant un mini resolveur Prolog en Caml (en TP), je me suis rendu compte que nombreux étaient ceux qui ne comprenaient pas le fonctionnement d'un interprète Prolog, ni de l'idée sous jacente à ce langage.
Et pourtant ils étaient à fond, et tapaient du code à la vitesse de la lumière, j'entends encore le cliqueti des claviers... :p

kaxes
kaxes
Niveau 4
09 mars 2010 à 22:24:54

j'avais déja de petite base en programmation visual basic
donc je vais continuer j'ai un livre qui est "Débuter en programmation le guide complet " de fredétyk blot et yann lautrédou

Quand j'aurais fais la "phase 2" de ton programme je devrais faire quoi ?

saleGauss
saleGauss
Niveau 9
09 mars 2010 à 22:52:47

après la phase 1, qui était "les bases de l'algorithmique avec des boutons et de fenetre" et après
l'étape 2 qui est d'assez bas niveau "Archi-Systeme-Langage C", je te conseille :
Etape 3 : Commencer à appréhender une autre manière de penser les choses.
Je te conseille alors le merveilleux langage OCaml.
Après l'étape 2 de bas niveau, tu devrais jouir de plaisir.
Tu vas voir que l'ont peut monter en abstraction d'un cran encore.
Tu avais ton matériel, et tes interruptions matérielles. Tu avais ton systeme, qui te donnait l'illusion d'un matériel qui execute des programmes en meme temps sur un meme processeur, tu as vu des processus,et des signaux (sorte de couche au dessus des interruptions matérielles), et tout cela représentait déjà une belle abstraction.
Tu as vu le langage C, ou comment survivre en s'élévant encore un peu du matériel.
Et là, avec OCaml, tu vas voir comment résoudre des problême à priori difficiles avec une grande élégance.
Tu vas penser non plus en terme de "comment ça marche" mais "POURQUOI ca ne peut QUE marcher".

Mais pour profiter pleinement de cette étape, je ne peux que te conseiller de prendre un maximum de temps sur l'étape 2.
Je trouve (et je le répète, c'est purement subjectif), qu'on ne peut comprendre la beauté d'un langage de haut niveau sans avoir tripatouillé proche du matériel, en s'élevant petit à petit dans l'abstraction.

Voila.
Et surtout, prends le temps.
Et n'hésite pas à poser tes questions au fur et à mesure, il y a un paquet de gens compétents sur ce forum.

Bon courage, et have FUN* !

  • : Vous aurez noté le mot de la fin
saleGauss
saleGauss
Niveau 9
09 mars 2010 à 23:05:17

Ajout :

Et dans cette phase 3, en parallèle à l'apprentissage d'Ocaml, tu pourras bien sur d'intéresser aux types abstrait de données.
J'ai sous la main un très bon cours d'un de mes profs (en .pdf) que je peux passer (il n'est pas dispo sur le net sans loggin ><).
C'est un document hard, et mieux vaut avoir déjà implémenté des conteneurs standards (piles, listes, files) et abordé la généricité, polymorphisme, et gestion des erreurs(en caml par exemple).
Pourtant, dans son poly, aucun rapport direct avec la programmation.
Ca ne parle que de type, de sortes, de constructeurs, d'observateurs, de modèle initial, dégénéré... de secouage et de repliage..
Il ne s'agit que d"une techniques algébriques de développement.
Les 80 premières pages introduisent l'essentiel des types abstrait de données.
Mais encore une fois, mieux vaut les avoir déjà croisés de manière plus informelle, au détour d'une spécification C ou Caml.

Bref, Etape 3 = TAD + Fonctionnel (OCaml).

PS : Je le répète, cet ordre d'apprentissage ne reflete que ma manière de concevoir l'enseignement, au vu de ce que j'en vois tous les jours, les bons, et les mauvais cotés

PS2 : Je ne cache pas mon attirance pour les modèles théoriques, qu'il s'agisse de théorie des langages ou de techniques algébriques pour les TADs.
Tout le monde ne partage pas forcemment ce goût, et je le comprend bien...
Mes conseils sont donc à écouter, mais pas forcemment à suivre à la lettre :p

Voici son cours :

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