Parser une expression

cs_mathmax Messages postés 403 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 31 août 2008 - 18 juin 2008 à 14:01
cs_mathmax Messages postés 403 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 31 août 2008 - 19 juin 2008 à 15:24
Bonjour,


J'aimerais parser une expression qui est une condition du langage de
programmation CA-Clipper, ceci afin de la traduire en language SQL. En
cherchant sur le web, j'ai découvert que les outils lex et yacc
permettent justement de faire ce genre de choses. Pensez-vous que ces
outils peuvent m'aider à résoudre mon problème ou me conseilleriez-vous
une autre technique ?

Voici un exemple de traduction que j'aurais à faire :

<!-- BEGIN TEMPLATE: bbcode_code -->
<!--[if !IE]><--><!----><!--[endif]--><!--[if IE]>
<![endif]-->("Mart" $ Customers->Name .and. Orders->Price >= 120) .or. Oders->Date = ctod("18/06/08")

<!-- END TEMPLATE: bbcode_code -->

qui sera traduit en :

<!-- BEGIN TEMPLATE: bbcode_code -->
<!--[if !IE]><--><!----><!--[endif]--><!--[if IE]>
<![endif]-->where exists (select 0 from Customers as C, Orders as O where C.Id = O.Customers_Id and (C.Name like "%Mart%" and O.Price >= 120) or O.Date = #18/06/08#)


Merci d'avance,


mathmax

Mathmax

****************************************http://www.postsharp.org/

2 réponses

cs_Lucky92 Messages postés 180 Date d'inscription mercredi 22 décembre 2004 Statut Membre Dernière intervention 16 août 2012 2
19 juin 2008 à 09:18
Bonjour,

Lex & yacc est un langage certainement trés intéressant, mais il est aussi trés confidentiel ! Pour t'en convaincre, il suffit de regarder la taille de l'article sur wikipédia... les risques portent donc sur l'apprentissage, le support et la maintenance de ton code.

Ensuite, le choix de la techno dépend de ton besoin : est-ce que tu dois créer un analyseur complet du langage CA-clipper ( qui semble bien confidentiel aussi ; on dirait un mélange de perl & de fortran ! ) ou seulement reconnaître quelques commandes ?

Dans l'exemple que tu présentes, j'ai le sentiment qu'un peu de c++ standard et une expression régulière bien sentie feraient parfaitement l'affaire. En revanche, si tu as besoin de parser tout le langage CA-clipper, il existe une bibliothèque boost::spirit qui fournit un framework pour construire des parseurs. L'utilisation de boost nécessite un niveau en c++ assez élévé ( bonne connaissance de la STL, maîtrise de la programmation générique ), en revanche, c'est quasiment du standard ( un certain nombre de bibliothèques de boost seront intégrés dans la prochaine version de c++ ).
0
cs_mathmax Messages postés 403 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 31 août 2008
19 juin 2008 à 15:24
Merci pour ta réponse.

En fait je suis novice en C++ (je programme en C# habituellement). J'ai d'ailleurs un problème avec un projet C++ crée avec Visual Studio 2008. La compilation ne génère pas de .exe dans le répertoire bin (bien que dans les propriété du projet l'option Configuration Type est bien sur "Application (.exe)"), mais seulement des .obj.

Du coup j'obtiens le message d'erreur suivant quand j'essai d'exécuter avec le debugger de Visual Studio :
Unable to start the program.
This application has failed to start
because the application configuration is incorrect. Review the manifest
file for possible errors. Reinstalling the application may fix the
problem. For more details, please see the application event log.

Une idée du problème ?

Merci

Mathmax

****************************************http://www.postsharp.org/
0
Rejoignez-nous