Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1446 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [C++] Programmation d'un interpreteur (parser)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] Programmation d'un interpreteur (parser)

n°701368
xterminhat​e
Si vis pacem, para bellum.
Posté le 16-04-2004 à 18:51:25  profilanswer
 

Bonjour,
 
   De manière générale, je cherche des informations pour réaliser un interpreteur ('parser'). Existe-t-il des modèles pour réaliser une telle fonction en C++. Le C++ est-il vraiment adapté à ce genre de fonction ?
 
   Je suis pret à coder ce parser "from scratch", mais je préfere demander l'avis du public avant de commencer !  :jap:  
 
Cordialement,
   Xter.


---------------
Cordialement, Xterm-in'Hate...
mood
Publicité
Posté le 16-04-2004 à 18:51:25  profilanswer
 

n°701370
toto78
Posté le 16-04-2004 à 18:52:57  profilanswer
 

Lexx yacc...plutot en C

n°701375
toto78
Posté le 16-04-2004 à 18:54:09  profilanswer
 

bouquin (au passage) = "compilateurs, principes techniques et outils"..alias dragon book

n°701385
xterminhat​e
Si vis pacem, para bellum.
Posté le 16-04-2004 à 19:02:46  profilanswer
 

Lex, je vais finir par regarder, ce n'est pas la première fois que j'en entends parler ! :)
 
Merci,
   XteR.


---------------
Cordialement, Xterm-in'Hate...
n°701386
Taz
bisounours-codeur
Posté le 16-04-2004 à 19:03:18  profilanswer
 

flex :o

n°701388
toto78
Posté le 16-04-2004 à 19:05:37  profilanswer
 

ui c vrai...version GNU...vek bison

n°701389
xterminhat​e
Si vis pacem, para bellum.
Posté le 16-04-2004 à 19:05:43  profilanswer
 

Par contre j'aurais du preciser une chose importante : c'est une fonction logicielle destimée à être enfouie (execution par un microcontroller) -> je n'ai qu'un compilateur C/C++ à ma disposition. Lx/Flex/Lexx/truc se basent sur du C/C++ ?
 
Merci,
   XteR.


---------------
Cordialement, Xterm-in'Hate...
n°701390
toto78
Posté le 16-04-2004 à 19:06:16  profilanswer
 

ça génére le code C

n°701391
xterminhat​e
Si vis pacem, para bellum.
Posté le 16-04-2004 à 19:06:46  profilanswer
 

Tres bien, c'est parfait. Merci.


---------------
Cordialement, Xterm-in'Hate...
n°701392
Taz
bisounours-codeur
Posté le 16-04-2004 à 19:06:51  profilanswer
 

toto78 a écrit :

ça génére le code C

ou du code C++ à la demande

mood
Publicité
Posté le 16-04-2004 à 19:06:51  profilanswer
 

n°701394
toto78
Posté le 16-04-2004 à 19:12:20  profilanswer
 

exacte : `%option c++'
je l'ignorais :)

n°701494
xterminhat​e
Si vis pacem, para bellum.
Posté le 16-04-2004 à 23:15:18  profilanswer
 

Effectivement, flex génère du code en C ou C++ mais le code en question n'est pas autonome (il faut linker avec une libriarie). Il faut déja que j'arrive à compiler cette lib sur la cible qui m'interesse. A vérifier donc...
 
Xter.


---------------
Cordialement, Xterm-in'Hate...
n°701554
el muchach​o
Comfortably Numb
Posté le 17-04-2004 à 09:54:42  profilanswer
 

xterminhate a écrit :

Bonjour,
 
   De manière générale, je cherche des informations pour réaliser un interpreteur ('parser'). Existe-t-il des modèles pour réaliser une telle fonction en C++. Le C++ est-il vraiment adapté à ce genre de fonction ?
 
   Je suis pret à coder ce parser "from scratch", mais je préfere demander l'avis du public avant de commencer !  :jap:  
 
Cordialement,
   Xter.


 
C'est un peu off topic, mais pour ceusse qui se lancent dans l'écriture d'un langage applicatif, j'en profite pour signaler le langage Objective Caml qui est idéal pour l'écriture d'interpréteurs/compilateurs (c'est même l'un de ses usages premiers, le compilo lui-même étant écrit en ocaml). Le coeur du langage est assez facile à apprendre et par rapport à C++, nul doute que ce langage te facilitera la tâche, notamment grâce au pattern matching.
 
http://www.ocaml.org
 
Il me semble que quelque part dans la doc, il y a un exemple où on écrit un interpréteur Basic en quelques centaines de lignes.
En attendant, voici une page où l'on donne un exemple de lexeur :
http://caml.inria.fr/ocaml/htmlman/manual003.html
Ocaml possède aussi un Lex et Yacc, ainsi que des macros puissantes.
 
L'autre solution valable et qui peut faire gagner un temps précieux, est d'embarquer un interpréteur Scheme écrit en C comme SIOD, Elk ou Guile, et de développer un maximum de choses en Scheme :
http://www-rn.informatik.uni-bremen.de/software/elk/
http://www.cs.indiana.edu/scheme-r [...] p/siod.htm
http://www.gnu.org/software/guile/
 
A ce sujet, ce qui est écrit ci-dessous est vérifié presque systématiquement. Le langage d'extension, qui est au départ une fonctionnalité annexe devient assez vite un point central de l'application. Si on en a la possibilité, c'est beaucoup plus simple et puissant d'apprendre Scheme que d'écrire un nouvel interpréteur "from scratch".
 

Citation :

The true cost of doing it yourself
 
When you get to the point in your project where you need a scripting language or a configuration file format and reader, the normal course of things is to say ``I'll just do something clean and simple.'' This is a good decision. Adding a full programming language is just a distraction from your project. But simple languages don't seem capable of staying simple. For example, early releases of PHP, a language for generating web pages dynamically, enjoyed its minute memory footprint and simplicity. However over time PHP has grown, with the latest releases giving PHP an object system and other features that have grown it to a much larger size. Compare Tcl from its 1988 origins with the modern, sizable language. Broadly, the same progression has occurred with Perl.  
 
The point here is not to criticize these very successful and useful languages. The point is to demonstrate how commonly the simple, good scripting languages have turned into complex systems. This is not necessary, but it's a new problem that Guile attempts to address.  


Message édité par el muchacho le 17-04-2004 à 10:36:55
n°701565
xterminhat​e
Si vis pacem, para bellum.
Posté le 17-04-2004 à 10:52:08  profilanswer
 

J'ai aussi entendu parler du calm. Et concernant le sceme, ca me rappelle l'école et les cours de programmation (lisp).
 
Merci,
Xter.
 


---------------
Cordialement, Xterm-in'Hate...
n°701578
el muchach​o
Comfortably Numb
Posté le 17-04-2004 à 11:08:28  profilanswer
 

Très bien, mais ce n'est pas parce que tu l'as appris à l'école que ce n''est pas sérieux. ;)
Si ce langage est enseigné, c'est justement parce qu'il permet d'aller rapidement à l'essentiel, l'algorithmie, sans s'encombrer de choses annexes (gestion de la mémoire, pointeurs, etc, avec tous les bugs que ça amène), ce qui est exactement ce que désire l'utilisateur d'un langage d'extension.


Message édité par el muchacho le 17-04-2004 à 11:08:58
n°701606
toto78
Posté le 17-04-2004 à 12:01:44  profilanswer
 

* el muchacho ->  
- Est ce que le parser produit est correct en temps de traitement ? (est ce qu'il y aurait des benchs comparatifs dispo quelque part ?)
- Est ce qu'il y aurait quelque part un retour d'experience disponible qui comparerait les gains en temps de développement et évolution par rapport à un projet en C/C++ ? (peut être pas complet mais au moins sur l'implémentation de quelques fonctionnalitées comme la gestion mémoire)
* xterminhate ->
Juste par curiosité : quel compilo et quel microctrl ?
Et tjrs par curiosité :) Pourrais tu nous tenir au courant ?

n°701622
xterminhat​e
Si vis pacem, para bellum.
Posté le 17-04-2004 à 12:35:38  profilanswer
 

Il s'agit d'un developpement pour microcontrolleur motorola à coeur 68000.
 
Si vos conseils m'ont eclairé dans le domaine des analyseurs syntaxiques (ca m'a donné une idée pour recoder un programme que j'ai réalisé il y a peu de temps)), je m'oriente toujours vers une solution C/C++ fait maison car le langage à interpreter est relativement simple dans mon cas et que le pauvre microcontroller que j'ai tourne vraiment pas vite ;).
 
Cordialement,
 xter.


---------------
Cordialement, Xterm-in'Hate...
n°701627
el muchach​o
Comfortably Numb
Posté le 17-04-2004 à 12:43:57  profilanswer
 

toto78 a écrit :

* el muchacho ->  
- Est ce que le parser produit est correct en temps de traitement ? (est ce qu'il y aurait des benchs comparatifs dispo quelque part ?)
- Est ce qu'il y aurait quelque part un retour d'experience disponible qui comparerait les gains en temps de développement et évolution par rapport à un projet en C/C++ ? (peut être pas complet mais au moins sur l'implémentation de quelques fonctionnalitées comme la gestion mémoire)
* xterminhate ->
Juste par curiosité : quel compilo et quel microctrl ?
Et tjrs par curiosité :) Pourrais tu nous tenir au courant ?


 
Tu parles de quel langage ? Pour Ocaml, les exécutables sont très rapides, sans doute comparables à du C++ pour ce qui est d'un parser. Pour Scheme, c'est un interpréteur, donc il ne faut pas s'attendre à des perfs ultimes. De plus, les perfs sont je suppose très dépendantes de l'implémentation. Le bench le plus complet que je connaisse est  
http://www.bagley.org/~doug/shootout/index2.shtml
http://dada.perl.it/shootout/
Ocaml est très bien placé, mais comme tous les benchs, c'est à prendre avec des pincettes.
Pour ce qui est du gain de temps en implémentation, je ne connais pas d'étude sérieuse, à part peut-être http://www.theadvisors.com/langcomparison.htm (malheureusement, ocaml n'y est pas, mais je le mettrais autour de 15-20). Ocaml intègre un ramasse-miettes, donc pas de gestion mémoire. Mais ce qui fait gagner du temps, c'est le pattern matching et la programmation fonctionnelle, et la sûreté du langage (typage fort, pas de pointeurs).
 
Quand à Scheme, à part l'intégration dans l'application, il n'y a rien à faire, le langage est prêt à être utilisé tel quel.


Message édité par el muchacho le 17-04-2004 à 20:01:21
n°701629
toto78
Posté le 17-04-2004 à 12:44:34  profilanswer
 

ok, bon courage then..
 
68000 => 1979 mais quand même registre 32 bits, 16 bits pour le bus de données (a la meme epoque chez intel z'en etaient encore à du 16/8)...déja pas mal :)
Ca a fait le bonheur de nombreux ataristes et autres amigatistes....

n°701631
toto78
Posté le 17-04-2004 à 12:48:18  profilanswer
 

thanks pour les liens et les précisions muchacho....c'est exactement ce que je cherchais..

n°701633
xterminhat​e
Si vis pacem, para bellum.
Posté le 17-04-2004 à 12:49:19  profilanswer
 

Effectivement le coeur commence un peu à dater, mais c'est un microcontroller... c'est qd même mieux qu'un 8051 ;)


---------------
Cordialement, Xterm-in'Hate...
n°701634
Jubijub
Parce que je le VD bien
Posté le 17-04-2004 à 12:49:24  profilanswer
 

et des possesseurs de TI ;)


---------------
Jubi Photos : Flickr - 500px
n°701731
docmaboul
Posté le 17-04-2004 à 15:58:18  profilanswer
 

xterminhate a écrit :

Bonjour,
 
   De manière générale, je cherche des informations pour réaliser un interpreteur ('parser'). Existe-t-il des modèles pour réaliser une telle fonction en C++. Le C++ est-il vraiment adapté à ce genre de fonction ?
 
   Je suis pret à coder ce parser "from scratch", mais je préfere demander l'avis du public avant de commencer !  :jap:  
 
Cordialement,
   Xter.


 
En ayant codé un certain nombre, le C (ou le C++) est très adapté pour l'implémentation d'un parser solide et rapide. D'une manière très générale, l'histoire ressemble toujours à
- une grosse boucle sur le texte à parser
- quelques indicateurs d'état
- quelques pointeurs de position (début d'un mot, fin d'un mot, début d'une expression, ..., le tout pouvant être dans une structure ou une classe si on a besoin de se trimballer à droite ou à gauche les infos)
- un switch sur le caractère courant pour maintenir et updater tout ça
- une fonction chargée d'interpréter les mots et de produire la sortie
- un switch sur le retour de la fonction afin de se remettre dans un état correct selon le résultat et la tolérance aux erreurs du parser
 
Bref, c'est assez facile à faire sauf, peut-être, pour le tout premier et, en général, c'est plutôt rigolo.

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C++] Programmation d'un interpreteur (parser)

 

Sujets relatifs
cherche guide programmation mathématicaUn parser validant dans une servlet qui marche ?
Programmation C sous Linux - WindowsDifférence entre chaques languages de programmation ?
programmation de jeux 3D en OpenGLinterpréteur ASP...
Question sur la programmation QTParser de l'XML
Programmation pour CHARLYROBOTProgrammation QT et C++
Plus de sujets relatifs à : [C++] Programmation d'un interpreteur (parser)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR