Salut,
Si vous avez 5 mins, j’ai une bête question de programmation.
Je suis pas programmeur moi-même, mais je me demande quelle est la différence exacte entre un Parser et un Compiler…
Merci,
Kuruizuki
Salut,
Si vous avez 5 mins, j’ai une bête question de programmation.
Je suis pas programmeur moi-même, mais je me demande quelle est la différence exacte entre un Parser et un Compiler…
Merci,
Kuruizuki
Si je ne me trompe pas, un compiler genere du code (machine ou autre) a partir d’un arbre syntaxique créé par un parser qui parcours le code source en tentant de reconnaitre ce que t’as voulu écrire.
Bon, c’est très simplifié mais je crois que c’est ça.
Ce message a été édité par tal le 04/03/2004
Moi je donnerais une réponse un peu plus générique :
Un compiler, c’est un truc qui traduit (par exemple, ça traduit du C en code machine).
Un parser, c’est un truc qui lit quelque chose de structuré (qui lit un HTML, un XML, du code C).
Donc effectivement, un compiler se base sur un parser, une fois que ce dernier a lu le code, il reste "qu’à "le réécrire sous une autre forme.
Et bé non drea… C’est pas ça tu confonds langage compilé langage interpreté …
La bonne reponse est la premiére reponse … Je dirais que des fois on rajoute au parser des controles de typages (comme en Caml par exemple)
Koubiiak en passant
[quote]Et bé non drea… C’est pas ça tu confonds langage compilé langage interpreté …
Qu’est ce qui ne va pas dans la réponse de Drealmer ?
Un parser c’est la partie d’un programme qui lit un texte, verifie sa
syntaxe et l’analyse pour en faire quelquechose. Dans un compilateur le
parseur créera un arbe de syntaxe abstraite représentant tout le code, avant de faire quelques traitement dessus.
[quote]
La bonne reponse est la premiére reponse … Je dirais que des fois on
rajoute au parser des controles de typages (comme en Caml par exemple)
Non, en general la verification des types est faite en dehors du parser.
En gros, la plupars du temps un compilateur ca marche comme ca :
parser qui lit le fichier et crée un arbre de syntaxe abstraite correspondant au code
analyse sémantique sur l’arbre (verifications des types, variables et fonctions
bien déclarées, etc … pour détecter toutes les erreurs avant de
continuer)
traduction en un arbre en langage intermediaire (trés utile dans un compilateur
supportant plusieurs langages, et plusieurs architectures, comme gcc
par exemple)
optimisations
traduction en code assembleur
allocation des registres (la machine a un nombre limité de registres,
il faut donc choisir quelles variables seront dans des registres)
écriture de l’executable
Oups j’ai lu de travers la reponse de Drea … sorry
Sinon tu dis pas ou ce place le typer la … En faites tu le mettrai dans la gestion d’erreur … Enfin la gestion des types c’est pas dans tout les langages … Exemple y a pas de gestions de types en C (enfin pas au sens propre du terme)
Koubiiak