OVH Cloud OVH Cloud

parser de grammaire

23 réponses
Avatar
Sylvain
je cherche (aussi) un lexer pour parser des flux proposant leur propre
grammaire (déclaration de fonctions, opérateurs arithmétiques a-la-C,
valeurs immédiates).

le but est de construire une représentation des fonctions déclarées
(arbre ou autre ce n'est pas le point) et de parser des expressions pour
générer un flux texte qui sera l'expansion de ces expressions lues.

je suis parti d'un lexer self-made mais il existe sûrement des projets
avancés, merci pour toute piste.

Sylvain.

10 réponses

1 2 3
Avatar
Etienne
Bonjour,

je cherche (aussi) un lexer pour parser des flux proposant leur propre
grammaire (déclaration de fonctions, opérateurs arithmétiques a-la- C,
valeurs immédiates).


Tu as lex/Yacc et leur equivalent GNU :
- flex --> http://www.gnu.org/software/flex/
- bison --> http://www.gnu.org/software/bison/

C'est plus adapté au c mais cela fonctione "bien" avec du c++.

Sinon tu as spirit (http://boost.org/libs/spirit/index.html), une lib
de boost. La c'est pur du c++ avec je crois du mpl.

Etienne

Avatar
Sylvain
Etienne wrote on 09/08/2006 10:01:

je cherche (aussi) un lexer pour parser des flux proposant leur propre
grammaire (déclaration de fonctions, opérateurs arithmétiques a-la-C,
valeurs immédiates).


Tu as lex/Yacc et leur equivalent GNU :
- flex --> http://www.gnu.org/software/flex/
- bison --> http://www.gnu.org/software/bison/


merci Etienne pour cette réponse.

j'avais déjà regardé une distrib. de LEX, l' "inconvénient" dans mon cas
est que je ne souhaite pas (ne peux pas) générer un source C/C++ pour
une grammaire donnée mais plutôt construire dynamiquement les
expressions (principalement des fonctions simples) présentes dans mon
input file.

je suis parti pour l'implémentation actuelle d'un préprocesseur,
l'analyse syntaxique est OK mais l'analyse lexicale est absente, je suis
donc parti à coder un truc à générer des fonctions sous forme de btree
et c'est là que j'ai l'impression de réinventer l'eau tiède.

s'il n'y a pas mieux que lex/bison, je referais une passe sur leur
distrib. pour en extraire le lexer.

Sylvain.


Avatar
Laurent Deniau
Sylvain wrote:
Etienne wrote on 09/08/2006 10:01:


je cherche (aussi) un lexer pour parser des flux proposant leur propre
grammaire (déclaration de fonctions, opérateurs arithmétiques a-la-C,
valeurs immédiates).



Tu as lex/Yacc et leur equivalent GNU :
- flex --> http://www.gnu.org/software/flex/
- bison --> http://www.gnu.org/software/bison/



merci Etienne pour cette réponse.

j'avais déjà regardé une distrib. de LEX, l' "inconvénient" dans mon cas
est que je ne souhaite pas (ne peux pas) générer un source C/C++ pour
une grammaire donnée mais plutôt construire dynamiquement les
expressions (principalement des fonctions simples) présentes dans mon
input file.

je suis parti pour l'implémentation actuelle d'un préprocesseur,
l'analyse syntaxique est OK mais l'analyse lexicale est absente,


m'est avis que c'est l'inverse.

a+, ld.



Avatar
Sylvain
Laurent Deniau wrote on 09/08/2006 14:48:

je suis parti pour l'implémentation actuelle d'un préprocesseur,
l'analyse syntaxique est OK mais l'analyse lexicale est absente,


m'est avis que c'est l'inverse.


ben non (ayant codé ce préproc., je sais ce qu'il analyse).

un processeur C/C++ réalise l'analyse des appels (notamment) par
comparaison au 'lexique' des fonctions alors connues; le préproc. ne
sait que de résoudre les include, define et autre substitutions, il
n'utilise pas de lexique de référence - dans mon cas il vérifie tout de
même les mots clés mais ne construit pas de représentation des éléments
déclarés.

Sylvain.


Avatar
Laurent Deniau
Sylvain wrote:
Laurent Deniau wrote on 09/08/2006 14:48:


je suis parti pour l'implémentation actuelle d'un préprocesseur,
l'analyse syntaxique est OK mais l'analyse lexicale est absente,



m'est avis que c'est l'inverse.



ben non (ayant codé ce préproc., je sais ce qu'il analyse).

un processeur C/C++ réalise l'analyse des appels (notamment) par
comparaison au 'lexique' des fonctions alors connues;


Qu'est ce que 'lexique des fonctions connues' a a voir ici?

le préproc. ne
sait que de résoudre les include, define et autre substitutions, il
n'utilise pas de lexique de référence - dans mon cas il vérifie tout de
même les mots clés mais ne construit pas de représentation des éléments
déclarés.


Donc le fichier est deja decompose en lexemes...

A ma connaissance, l'ordre impose est

analyse lexicale *puis* analyse syntaxique *puis* analyse semantique

puisque chaque etape depend de la precedente (souvent de facon
incrementale). Ca peut etre imbrique (notament en C/C++ a cause d'une
ambiguite syntaxique dans la grammaire) mais pas inverse.

a+, ld.



Avatar
Sylvain
Laurent Deniau wrote on 09/08/2006 17:02:

un processeur C/C++ réalise l'analyse des appels (notamment) par
comparaison au 'lexique' des fonctions alors connues;


Qu'est ce que 'lexique des fonctions connues' a a voir ici?


en peine de réfléchir (2 sec.) ou enclin au "bavardage" ?

version longue:
pour "lexique" je te renvoie au Littré (au autre)
les fct connues sont celles dont la déclaration est fourni par le
travail du préproc (dont chargement des include).

version courte:
qu'est-ce l'inverse avait à voir ici ?

le préproc. ne sait que de résoudre les include, define et autre
substitutions, il n'utilise pas de lexique de référence - dans mon cas
il vérifie tout de même les mots clés mais ne construit pas de
représentation des éléments déclarés.


Donc le fichier est deja decompose en lexemes...


il pourrait mais ce n'est pas /strictement parlant/ le cas.
je n'ai pas à gérer une grammaire spécifique (donc pas de lexemes) mais
seulement une syntaxe (des opérateurs et des variables formelles).

A ma connaissance, l'ordre impose est

analyse lexicale *puis* analyse syntaxique *puis* analyse semantique


et je rerépète que mon "lexique" est seulement une syntaxe.

puisque chaque etape depend de la precedente (souvent de facon
incrementale). Ca peut etre imbrique (notament en C/C++ a cause d'une
ambiguite syntaxique dans la grammaire) mais pas inverse.


si tu veux ... les termes (non explicités ici) ont des sens
informatiques et lexical suffisant flou pour cela.

et ça n'avance en rien mon bouzin ... ma question est: connaissez-vous
une lib. C++ pour ce type de process ? pas une interrogation
métaphysique sur l'art de décrire une analyse de texte (d'autre NG
seraient plus pertinents).

Sylvain.


Avatar
Loïc Joly
Etienne wrote on 09/08/2006 10:01:


je cherche (aussi) un lexer pour parser des flux proposant leur propre
grammaire (déclaration de fonctions, opérateurs arithmétiques a-la-C,
valeurs immédiates).



Tu as lex/Yacc et leur equivalent GNU :
- flex --> http://www.gnu.org/software/flex/
- bison --> http://www.gnu.org/software/bison/



merci Etienne pour cette réponse.

j'avais déjà regardé une distrib. de LEX, l' "inconvénient" dans mon cas
est que je ne souhaite pas (ne peux pas) générer un source C/C++ pour
une grammaire donnée mais plutôt construire dynamiquement les
expressions (principalement des fonctions simples) présentes dans mon
input file.


Alors je pense que la seconde proposition d'Etienne pourrait te convenir.


je suis parti pour l'implémentation actuelle d'un préprocesseur,
l'analyse syntaxique est OK mais l'analyse lexicale est absente, je suis
donc parti à coder un truc à générer des fonctions sous forme de btree
et c'est là que j'ai l'impression de réinventer l'eau tiède.


Comme Laurent, je pense qu'il y a confusion dans le vocabulaire employé.
Il n'y a aucun lien entre l'analyse lexicale et la notion de lexique.
Et j'ai du mal à voir comment analyser la syntaxe sans avoir au
préalable effectué un découpage en lexèmes.


s'il n'y a pas mieux que lex/bison, je referais une passe sur leur
distrib. pour en extraire le lexer.


Mieux, je ne sais pas, mais tu n'as pas l'air d'accuser réception de la
seconde proposition. Es-tu sur de ne pas l'avoir sautée ?

--
Loïc



Avatar
Sylvain
Loïc Joly wrote on 09/08/2006 21:01:

Comme Laurent, je pense qu'il y a confusion dans le vocabulaire employé.


pareil ! mais mon but n'est de distinguer finement entre ce qui serait
du purement lexical vs syntaxique vs sémantique - et je n'aurais pas la
compétence littéraire pour le faire.

Il n'y a aucun lien entre l'analyse lexicale et la notion de lexique.


si ce n'est qu'un "lexème" est l'"unité minimale de signification
appartenant à un lexique" (www.atilf.fr).

si j'ai introduit ce lien ou ce sous-entendu c'est seulement pour dire
qu'une analyse lexicale i.e. le découpage des lexèmes - qui au moins
dans un tel cadre doivent appartenir à un lexique (le moteur ne s'attend
pas à 'découvrir' des mots non prévu) - n'est pas la partie sur laquelle
je demandais des sources.

Et j'ai du mal à voir comment analyser la syntaxe sans avoir au
préalable effectué un découpage en lexèmes.


nous sommes d'accord ! "lexème" est un peu trop riche pour mon cas,
c'est juste une pôôvre ponctuation - mais vous avez raison.

s'il n'y a pas mieux que lex/bison, je referais une passe sur leur
distrib. pour en extraire le lexer.
Mieux, je ne sais pas, mais tu n'as pas l'air d'accuser réception de la

seconde proposition. Es-tu sur de ne pas l'avoir sautée ?


j'ai bcp moins regardé bison que lex, je ne les pas 'sauté', simplement
pas encore étudié ... mais j'y travaille (en autre chose); merci pour
votre confirmation à regarder cette voie.

Sylvain.


Avatar
Sylvain
Sylvain wrote on 09/08/2006 22:35:

j'ai bcp moins regardé bison que lex ...


lire 'spirit' !...

Avatar
Jean-Marc Bourguet
Sylvain writes:

Avant de regarder comment utiliser les programmes, je te
suggère de lire un peu de théorie sinon à forcer d'employer
les mots dans un sens différent de celui qu'ils ont acquis
dans le domaine, tu ne comprendras rien et personne ne te
comprendra.

Une référence: http://www.cs.vu.nl/~dick/PTAPG.html

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
1 2 3