Generation automatique de code C

Le
candide
Bonjour,

C'est juste pour ma culture. Je suppose qu'il existe des programmes qui génèrent
automatiquement du code C, par exemple il me semblait avoir vu dans les sources
de gcalctool (une calculatrice sous gnome) des fichiers C qui, vu l'origine
déclarée, vu son allure générale et vu le nombre de goto qu'il contenait devait
être une traduction (non humaine !) directement du Fortran. Autre exemple qui me
vient à l'esprit mais que je n'ai jamais expérimenté : glade le générateur de
code C d'interface graphique.

Donc si vous avez connaissance d'autres exemples, si vous savez si c'est une
pratique industrielle fréquente, etc, je suis curieux de savoir.

Merci
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 3
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Eric Levenez
Le #18901881
Le 14/03/09 18:29, dans
Donc si vous avez connaissance d'autres exemples, si vous savez si c'est une
pratique industrielle fréquente, etc, je suis curieux de savoir.



Lex/yacc et flex/bison génèrent aussi du code C.

--
Éric Lévénez
FAQ de fclc :
Alexandre BACQUART
Le #18902251
candide wrote:
Bonjour,

C'est juste pour ma culture. Je suppose qu'il existe des programmes qui génèrent
automatiquement du code C, par exemple il me semblait avoir vu dans les sources
de gcalctool (une calculatrice sous gnome) des fichiers C qui, vu l'origine
déclarée, vu son allure générale et vu le nombre de goto qu'il contenait devait
être une traduction (non humaine !) directement du Fortran. Autre exemple qui me
vient à l'esprit mais que je n'ai jamais expérimenté : glade le générateur de
code C d'interface graphique.

Donc si vous avez connaissance d'autres exemples, si vous savez si c'est une
pratique industrielle fréquente, etc, je suis curieux de savoir.



Dans le cadre de mon travail, je suis sur un projet embarqué où
j'utilise Perl pour générer du code C à partir d'une base de données
Excel. Comme les structures de cette base de données évoluent avec le
temps (client capricieux), ça me permet de travailler sur des prototypes
en C, puis lorsqu'ils fonctionnent, j'utilise Perl pour générer les même
structures à partir du XLS. Il n'y a plus qu'à intégrer le script Perl
dans le build, et vogue la galère. Ca m'évite aussi de maintenir un
format de fichier binaire bâtard, avec toutes les complications que ça
implique.

Mais je ne recommande pas ce genre de technique pour les bases de
données. Si tout est dans l'exécutable, on perd l'énorme avantage de
pouvoir changer la DB sans tout recompiler. De plus, il faut être sûr
que la taille de l'exécutable ne sera pas un problème (sur ce point,
j'arguerais que C permet de rester très compact). Ca ne peut bien-sûr
pas être appliqué à tous les projets et/ou à toutes les bases de données.


--
Alex
Vincent Lefevre
Le #18904161
Dans l'article Alexandre BACQUART
Dans le cadre de mon travail, je suis sur un projet embarqué où
j'utilise Perl pour générer du code C à partir d'une base de données
Excel.



Moi aussi j'utilise de Perl pour générer du code C, mais avec des
résultats obtenus par Maple (utilisé pour des raisons historiques,
mais j'espère m'en débarrasser dans le futur).

--
Vincent Lefèvre 100% accessible validated (X)HTML - Blog: Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)
Pierre Maurette
Le #18904321
candide, le 14/03/2009 a écrit :
Bonjour,

C'est juste pour ma culture. Je suppose qu'il existe des programmes qui
génèrent automatiquement du code C, par exemple il me semblait avoir vu dans
les sources de gcalctool (une calculatrice sous gnome) des fichiers C qui, vu
l'origine déclarée, vu son allure générale et vu le nombre de goto qu'il
contenait devait être une traduction (non humaine !) directement du Fortran.



Peut-être, sans doute, un coup de f2c. Un *traducteur* de code Fortran
77 vers C. Fondamentalement, puisque ça génère du code C, c'est un
générateur de code C, mais un peu particulier. J'ai utilisé LAPACK en
C, au départ je pensais à un wrapper, mais je crois quece n'est pas le
cas, que c'est bien une traduction source Fortran vers source C.

Autre exemple qui me vient à l'esprit mais que je n'ai jamais expérimenté :
glade le générateur de code C d'interface graphique.



Dans la version 2, abandonné dans Glade 3.

Donc si vous avez connaissance d'autres exemples, si vous savez si c'est une
pratique industrielle fréquente, etc, je suis curieux de savoir.



Je crois bien que le compilateur de beaucoup de langages - compilés -
fut initialement un générateur ce code C. Et à mon avis, ce n'est pas
parce que ce code C n'est pas accessible qu'il n'est pas généré.
C'était même une des idées à la base du C, "l'assembleur portable".

Sinon, générer du code C est sans doute assez courant. On peut par
exemple générer du code C à partir de code C, à l'aide d'un script. A
cause des limites du préprocesseur par exemple. Un exemple, que j'avais
bricolé en Ruby avec l'aide d'un Harpo qui traînait ici il y a quelque
temps: générer en recherchant les enum dans un projet le code (.c et
.h) qui permet d'obtenir le membre de l'enum sous forme d'un char* à
partir de l'enum (un entier).

Avec les technos internet on passe son temps à générer du code. Php
génère du HTML et accède aux BdD. Python également, mais je l'utilise
offline pour générer plein de trucs, CSS et ... Php en particulier.

--
Pierre Maurette
-ed-
Le #18906321
On 14 mar, 18:29, candide
Donc si vous avez connaissance d'autres exemples, si vous savez si c'est une
pratique industrielle fréquente, etc, je suis curieux de savoir.



Oui, c'est très courant.

Généralement, les gens se font de scripts en bash, perl, Python
ou ... C qui répondent à leurs habitudes de travail ou à des
spécifications clients changeantes....
espie
Le #18906281
In article -ed-
On 14 mar, 18:29, candide
Donc si vous avez connaissance d'autres exemples, si vous savez si c'est une
pratique industrielle fréquente, etc, je suis curieux de savoir.





Oui, c'est très courant.



Généralement, les gens se font de scripts en bash, perl, Python
ou ... C qui répondent à leurs habitudes de travail ou à des
spécifications clients changeantes....



Ca occasionne generalement des tonnes de soucis lorsque les scripts en
question sont subtilement buggues... typiquement, c'est au moins d'un
ordre de grandeur plus complexe de reparer un generateur de code que le
code lui-meme. En terme de maintenance, faut etre raisonnablement sur
d'avoir sous la main le gus qui a pondu le generateur, et qu'il soit capable
de le maintenir.

Il y a egalement tres souvent les problemes du preprocesseur mais en pire:
les generateurs de code supposent souvent que les fragments inclus ont une
tete bien definie, n'ont evidemment pas ce qu'il faut pour apprehender la
semantique des fragments, et se contentent de les inserer dans le code
genere sans les comprendre. Quand ca explose, en general, ca fait tres mal.

Ca marche bien dans des cas ou l'objectif du generateur est completement
decorrele des fragments inclus (lex ou yacc), et bien sur aussi s'il n'y
a pas de fragments inclus parce qu'on a affaire a un vrai compilateur...
Alain Montfranc
Le #18908171
candide a écrit
Bonjour,

C'est juste pour ma culture. Je suppose qu'il existe des programmes qui
génèrent automatiquement du code C, par exemple il me semblait avoir vu dans
les sources de gcalctool (une calculatrice sous gnome) des fichiers C qui, vu
l'origine déclarée, vu son allure générale et vu le nombre de goto qu'il
contenait devait être une traduction (non humaine !) directement du Fortran.
Autre exemple qui me vient à l'esprit mais que je n'ai jamais expérimenté :
glade le générateur de code C d'interface graphique.

Donc si vous avez connaissance d'autres exemples, si vous savez si c'est une
pratique industrielle fréquente, etc, je suis curieux de savoir.

Merci



Le langage Eiffel (au moins dans ses premieres versions) générait du C
ou du C++ si bien que le moindre "hello world" pesait un sacré poids !
jacob navia
Le #18908751
candide wrote:
Bonjour,

C'est juste pour ma culture. Je suppose qu'il existe des programmes qui génèrent
automatiquement du code C, par exemple il me semblait avoir vu dans les sources
de gcalctool (une calculatrice sous gnome) des fichiers C qui, vu l'origine
déclarée, vu son allure générale et vu le nombre de goto qu'il contenait devait
être une traduction (non humaine !) directement du Fortran. Autre exemple qui me
vient à l'esprit mais que je n'ai jamais expérimenté : glade le générateur de
code C d'interface graphique.

Donc si vous avez connaissance d'autres exemples, si vous savez si c'est une
pratique industrielle fréquente, etc, je suis curieux de savoir.

Merci



Le compilateur lcc-win est utilise comme back end par

Langages

Eiffel (Small eiffel)
Objective C
ml4 (langage 4GL)

Autres clients:
Pharmacologie (calculs des structures de certains medicaments)
Mathlab (back end lcc)

etc

Vous pouvez telecharger lcc-win (Un compilateur produit dans le neuf
trois) chez jacob

http://www.cs.virginia.edu/~lcc-win32

--
jacob navia
jacob at jacob point remcomp point fr
logiciels/informatique
http://www.cs.virginia.edu/~lcc-win32
Marc Boyer
Le #18912091
On 2009-03-14, candide
Bonjour,


[SNIP]

Donc si vous avez connaissance d'autres exemples, si vous savez si c'est une
pratique industrielle fréquente, etc, je suis curieux de savoir.



De mémoire, il me semble que le premier compilo Caml générait du C
(mais je n'arrive pas à confirmer l'info).
Sinon, chez Airbus, certaines activités sont codées dans des langages
métier (SCADE) puis un compilo génère du C.
http://www.esterel-technologies.com/products/scade-suite/
http://www.esterel-technologies.com/products/scade-suite/do-178b-code-generation/

Marc Boyer
--
Au XXIème siècle, notre projet de société s'est réduit
à un projet économique...
espie
Le #18912161
In article Marc Boyer
On 2009-03-14, candide
Bonjour,


[SNIP]

Donc si vous avez connaissance d'autres exemples, si vous savez si c'est une
pratique industrielle fréquente, etc, je suis curieux de savoir.



De mémoire, il me semble que le premier compilo Caml générait du C
(mais je n'arrive pas à confirmer l'info).



Ah non, le premier compilo caml tournait avec du lisp derriere.

Tu penses sans doute au premier compilo caml-light ? ;-)
Publicité
Poster une réponse
Anonyme