OVH Cloud OVH Cloud

Compilateur et implémentation

55 réponses
Avatar
azoulayi
Bonjour tout le monde,

Je suis à la recherche de code source d'un compilateur écrit en lex
et bison.
je voudrai avoir de la documentation sur la partie d'adressage
mémoire, sur la maniere d'implémenter l'allocation de mémoire (stack,
heap) et les structures de blocs dépendament de la machine

vous auriez des adresses de site concernant cela?

merci bien

10 réponses

1 2 3 4 5
Avatar
Thierry Boudet
In article ,
wrote:
Je suis à la recherche de code source d'un compilateur écrit en lex
et bison.
je voudrai avoir de la documentation sur la partie d'adressage
mémoire, sur la maniere d'implémenter l'allocation de mémoire (stack,
heap) et les structures de blocs dépendament de la machine

bonne idée.


vous auriez des adresses de site concernant cela?

J'ai beaucoup apprécié ce livre

http://www.jpbennett.fsbusiness.co.uk/book.htm
mais je pense qu'il est épuisé.

ceci dit le le tarball du code est dispo, et
c'est assez instructif à lire :)

--
PLOP PLOP PLOP PLOP PLOP PLOP PLOP PLOP PLOP PLOP PLOP PLOP

Avatar
Emmanuel Delahaye
In 'fr.comp.lang.c', wrote:

Je suis à la recherche de code source d'un compilateur écrit en lex
et bison.
je voudrai avoir de la documentation sur la partie d'adressage
mémoire, sur la maniere d'implémenter l'allocation de mémoire (stack,
heap) et les structures de blocs dépendament de la machine

vous auriez des adresses de site concernant cela?


news:comp.compilers

--
-ed- [remove YOURBRA before answering me]
The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html
<blank line>
FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/

Avatar
Yves Kuhry
wrote:

Bonjour tout le monde,

Je suis à la recherche de code source d'un compilateur écrit en lex
et bison.


http://nicolas.justin.free.fr/Projets/comp-0.0.5.tar.gz

HTH

Avatar
Marc Boyer
wrote:
Bonjour tout le monde,

Je suis à la recherche de code source d'un compilateur écrit en lex
et bison.
je voudrai avoir de la documentation sur la partie d'adressage
mémoire, sur la maniere d'implémenter l'allocation de mémoire (stack,
heap) et les structures de blocs dépendament de la machine


Sur l'allocation dans le tas, ma connaissance (limitée) du sujet
est que, sous Solaris et Linux, c'est une fonctionnalité gérée
par la libc+l'OS, sans intervention du compilateur.
J'aurais tendance à croire que c'est assez général comme
approche et que seuls des compilateurs spécifiques s'amusent
à le faire eux même.

fu2 fr.comp.os.divers (soyez libre d'en positionner
un autre si nécessaire)

Marc Boyer
--
Lying for having sex or lying for making war? Trust US presidents :-(

Avatar
Marc Boyer
wrote:
Marc Boyer wrote in message news:<bfqnic$puf$...
wrote:

Sur l'allocation dans le tas, ma connaissance (limitée) du sujet
est que, sous Solaris et Linux, c'est une fonctionnalité gérée
par la libc+l'OS, sans intervention du compilateur.
J'aurais tendance à croire que c'est assez général comme
approche et que seuls des compilateurs spécifiques s'amusent
à le faire eux même.
Je ne pense pas , en fait chaque langage de programmation doit

implémenter son système d'allocation dynamique, donc un tas (pour C,
gestion de malloc et de free .., demande explicite d'allocation de
mémoire...)


Ce que je dis, c'est que malloc/free sous Solaris et Linux
sont gérés par la libc et l'OS. Et je soupsonne que de nombreux
langages procéduraux qui ont un fonctionnement assez similaire
(Pascal, Ada, Eiffel, C++) utilisent ces malloc/free de plus
ou moins prêt. Et je pense que pas mal d'OS ont le même
découpage.

et une pile(stack) qui est un système d'indexatation,
gestion des variables locaux à l'interieur d'une procedure ...
Ceci dit cela dépendera du système d'exploitation et des contraintes
du microprocesseur...


Ca, OK.

Ceci dit, si ta demande ne concerne pas le langage C, merci
de positionner un fu2 vers un groupe idoine.

Marc Boyer
--
Lying for having sex or lying for making war? Trust US presidents :-(


Avatar
EpSyLOn
On 24 Jul 2003 13:10:50 -0700, wrote:

Bonjour tout le monde,

Je suis à la recherche de code source d'un compilateur écrit en lex
et bison.
je voudrai avoir de la documentation sur la partie d'adressage
mémoire, sur la maniere d'implémenter l'allocation de mémoire (stack,
heap) et les structures de blocs dépendament de la machine

vous auriez des adresses de site concernant cela?


(Désolé, je dérive un peu la question)
Le livre de référence est le "Dragon Book" de Aho, Sethi et Ullman et
s'intitule "Compilers : Principles, Techniques and Tools".
Si tu cherches des sources de compilos, il y a bien sur gcc (il me
semble que les lexeurs/analyseurs syntaxique sont écrits avec flex et
bison ?), mais aussi Lcc et Small-C. Cherche bien sur le net.

--
___
| | |/
sas.epsylon<at>wanadoo.fr | | (o o)
______ ______ _____ __ _ | |oOO_(_)_OOo
/ __ Y / ____/ / !' |/
| ____/ |__> |____ ` | |_ O | ^ |
_____/| ___/______X_ Y_______|___/__||__|
~*~ |__| ____/

Avatar
Gabriel Dos Reis
EpSyLOn writes:

| On 24 Jul 2003 13:10:50 -0700, wrote:
|
| >Bonjour tout le monde,
| >
| >Je suis à la recherche de code source d'un compilateur écrit en lex
| >et bison.

Tout d'abord, il n'y a pas de compilateurs écrits totalement en lex ou
bison. Lex est un outil qui aide à l'analyse lexicale et bison est un
analyseur syntaxique. Aucun de ces outils ne s'occupent de la
sémantique, et encore moins de la génération de code ou ce que l'on
appelle dans le jargon, le « middle end » et le « back end ».
Si tu t'intéresses au thème de la compilation alors je crois que
news:comp.compilers te sera d'une aide appréciable -- surtout la FAQ.

| >je voudrai avoir de la documentation sur la partie d'adressage
| >mémoire, sur la maniere d'implémenter l'allocation de mémoire (stack,
| >heap) et les structures de blocs dépendament de la machine
| >
| >vous auriez des adresses de site concernant cela?
|
| (Désolé, je dérive un peu la question)
| Le livre de référence est le "Dragon Book" de Aho, Sethi et Ullman et
| s'intitule "Compilers : Principles, Techniques and Tools".

En effet.

Il y a un peu longtemps, lorsque j'étais encore jeune et que j'ai
attrapé la maladie de construire un compilateur pour C/C++, j'ai
acheté le bouquin « Compiler Design in C » de Allen Holub ((C) 1990)
-- je ne sais pas s'il l'a mis à jour depuis.
C'est un formidable pavé ; il passe près de la moitié à expliquer la
théorie de l'analyse lexicale et l'analyse syntaxique (un peu lassant
à la fin). C'est un bouquin qui illuste la théorie par la pratique
(quand je dis pratique, on code vraiment et on voit ce que donne le
code) et propose donc un analyseur lexical (LeX) et un analyseur
syntaxique LLamma (parseur LL(1)).
Donc, on part de rien (si, d'un compilateur C) et on construit son
propre LeX et LLamma. Et de là, on se lance dans la construction d'un
mini-compilateur pour le lanagage C. La génération de code tient moins
de place, mais y est relativement bien expliqué et bien traité.

| Si tu cherches des sources de compilos, il y a bien sur gcc (il me
| semble que les lexeurs/analyseurs syntaxique sont écrits avec flex et
| bison ?), mais aussi Lcc et Small-C. Cherche bien sur le net.

Si, je ne me trompe LCC utilise un parseur écrit à la main. Le bouquin
« accompagnateur » « A retargetable C compiler: design and
implementation » illustre bien la génération de code (trois back ends:
MIPS R3000, SPARC and x86).

Il y a GCC-3.x (x < 5), effectivement -- une floppée de back ends --
mais je ne le conseillera pas.
Comme le langage C n'est pas Yacc-able, on utilise des extensions
Bison et en plus des abominations que je ne pourrais pas nommés
(grokdeclarator et compagnie) pour essayer de parser correctement le C
(et encore !). Je ne le consiellerai pas à un debutant. Le bouquin de
Appel n'est pas mal non plus [sauf que la version "C" n'est qu'une
transcription litérale de la version ML :-(] « Modern Compiler
Implementation in C ». Il a un site web. Il convient bien à un cours
Deug-Licence (là je m'avance parce que je ne sais pas ce qu'on
enseigne maintenant en Deug ou Licence). Appel traite convenablement
bien le chapitre sur l'allocation des « activation records ».

-- Gaby
Avatar
Antoine Leca
écrivit:
Marc Boyer wrote in message
news:<bfqnic$puf$...

wrote:
je voudrai avoir de la documentation sur la partie d'adressage
mémoire, sur la maniere d'implémenter l'allocation de mémoire (stack,
heap) et les structures de blocs dépendament de la machine


Sur l'allocation dans le tas, ma connaissance (limitée) du sujet
est que, sous Solaris et Linux, c'est une fonctionnalité gérée
par la libc+l'OS, sans intervention du compilateur.
J'aurais tendance à croire que c'est assez général comme
approche et que seuls des compilateurs spécifiques s'amusent
à le faire eux même.



Dans "libc", il y a... C. C'est donc plus ou moins spécifique à C, non ?

En fait, dans le monde Unix (au sens assez large), l'allocation
passe très souvent en ultime lieu par malloc, parce qu'il existe
des bibliothèques de débogages "génériques" pour tester les
fuites de mémoires, qui s'appuient sur l'architecture technique
de Unix (libc etc.) pour fonctionner (elles remplacent le malloc
de la libc normale) et que ce mode de fonctionnement est
précieusement conservé par les actuels développeurs du monde
Unix, alors même que la technique (bibliothèque dynamique,
notamment) évolue autour.
Tout ceci est totalement spécifique à l'environnement C sur Unix
(donc pas vrai en général, ni pour d'autres langages, ni pour
d'autres systèmes).

Je ne pense pas , en fait chaque langage de programmation doit
implémenter son système d'allocation dynamique,


(sauf bien sûr les langages qui n'utilisent pas l'allocation dynamique !)

donc un tas (pour C,
gestion de malloc et de free .., demande explicite d'allocation de
mémoire...)


On est allé un peu vite ici. On est passé de l'allocation dynamique,
à l'allocation en général (static et auto, en termes C).

et une pile(stack) qui est un système d'indexatation,


(et qui n'a rien d'obligatoire, au moins en C)

gestion des variables locaux à l'interieur d'une procedure ...

Ceci dit cela dépendera du système d'exploitation et des contraintes
du microprocesseur...


Et pour finir on suppose l'existence d'un unique *micro*processeur,
avec un système d'exploitation.

C est beaucoup plus général que toutes ces hypothèses. Tu ferais
mieux de chercher sur des forums dédiés au système cible qui
t'intéresse (ou sur comp.compilers, mais tu vas avoir des surprises).


Antoine



Avatar
Jean-Marc Bourguet
"Antoine Leca" writes:

Dans "libc", il y a... C. C'est donc plus ou moins spécifique à C, non ?


La libc sous unix est une interface officielle de l'OS (quand c'est
pas la seule); c'est tres loin d'etre specifique au C et les
bibliotheques des autres langages sont tres souvent (je ne connais pas
d'exception) implementees par des appels a la libc.

Copie et suivi sur fr.comp.os.unix.

--
Jean-Marc
FAQ de fclc: http://www.isty-info.uvsq.fr/~rumeau/fclc
Site de usenet-fr: http://www.usenet-fr.news.eu.org

Avatar
Marc Boyer
Antoine Leca wrote:
écrivit:
Marc Boyer wrote in message
news:<bfqnic$puf$...

wrote:
je voudrai avoir de la documentation sur la partie d'adressage
mémoire, sur la maniere d'implémenter l'allocation de mémoire (stack,
heap) et les structures de blocs dépendament de la machine


Sur l'allocation dans le tas, ma connaissance (limitée) du sujet
est que, sous Solaris et Linux, c'est une fonctionnalité gérée
par la libc+l'OS, sans intervention du compilateur.
J'aurais tendance à croire que c'est assez général comme
approche et que seuls des compilateurs spécifiques s'amusent
à le faire eux même.



Dans "libc", il y a... C. C'est donc plus ou moins spécifique à C, non ?


Oui et non. Oui, si on considère que le C est un langage
"comme les autres". Non dans le sens ou le C est quasiment
"universel", et que, hormis cas très spécifique, si tu as à
écrire un compilo (autre qu'assembleur) sur une platerforme
donnée, il y a de *très* fortes chances qu'il existe déjà
un compilateur C.

Tout ceci est totalement spécifique à l'environnement C sur Unix
(donc pas vrai en général, ni pour d'autres langages, ni pour
d'autres systèmes).


Ne nous focalisons pas sur la lic. Je présentais cette technique
pour dire que l'allocation dynamique n'était pas gérée par
le *compilateur* mais par des éléments éxtérieurs, sur
des plateformes assez classiques.

donc un tas (pour C,
gestion de malloc et de free .., demande explicite d'allocation de
mémoire...)


On est allé un peu vite ici. On est passé de l'allocation dynamique,
à l'allocation en général (static et auto, en termes C).


Reprenons le thread à son origine.
Le PO demandait des sources pour savoir comment le compilateur
gérait l'allocation mémoire, dynamique (tas+pile) et statique.
et je lui disais que, hormis cas spécifiques, la gestion
du tas dynamique n'était pas de son ressort, mais du contexte
d'exécution (OS+lib qui va bien, machine virtuelle...)
Pour le reste, d'autres répondront.

Marc Boyer
--
Lying for having sex or lying for making war? Trust US presidents :-(




1 2 3 4 5