COW 1.0 FOR DELPHI7 : UN GÉNÉRATEUR DE CODE POUR GRAMMAIRES FORMELLES INTÉGRÉ À

f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 - 5 août 2006 à 05:58
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 - 22 janv. 2007 à 22:38
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/38931-cow-1-0-for-delphi7-un-generateur-de-code-pour-grammaires-formelles-integre-a-l-ide

cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
22 janv. 2007 à 22:38
Houuuppss je viens de trouver..
c'était tout en ba ba ba bas...
merci
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
22 janv. 2007 à 22:32
Forman : je reviens sur GExpert.. En fait, il stocke les compos dans des onglets mais comme j'en ai bcp, ils ne les stockent pas tous..
ce que je cherche c'est un stockage sur plusieurs niveaux de palettes.
yopai_v Messages postés 47 Date d'inscription jeudi 7 septembre 2006 Statut Membre Dernière intervention 21 avril 2010
9 sept. 2006 à 19:31
Non, l'éditeur de Cow.
De toute façon maintenant ça passe systématiquement...
Vu qu'entre-temps j'ai recompilé trois ou quatre fois Cow.bpl, c'est peut-être quelque chose qui était mal initialisé.

Maintenant ça marche nickel.

Merci quand même !
cs_Forman Messages postés 600 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 6 avril 2010 1
8 sept. 2006 à 20:39
Bonjour,
je viens de voir ton commentaire. C'est bizarre, ca fonctionne chez moi, éditeur fermé ou non. Ou alors on ne parle pas du même éditeur: tu veux dire l'éditeur de Delphi où tu tappes ton code?
yopai_v Messages postés 47 Date d'inscription jeudi 7 septembre 2006 Statut Membre Dernière intervention 21 avril 2010
8 sept. 2006 à 20:27
En fait, si on ouvre l'éditeur ça a l'air de passer
yopai_v Messages postés 47 Date d'inscription jeudi 7 septembre 2006 Statut Membre Dernière intervention 21 avril 2010
8 sept. 2006 à 00:33
Bonjour, et merci pour ce projet grandiose ! C'est exactement ce que je cherchais en fait.

Par contre, j'essaie sur le projet COW lui-même, comme tu l'indiques ci-dessus, et ca ne marche pas :
J'ai
Processing CowDirectivesParser.ppas
Could not find used lexer file : "CowDirectives.lexer"
Processing "CowIDELexers.ppas"
Processing "LexerDefinition.ppas"
Processing "ParserDefinition.ppas"

Je ne comprends pas ce qui manque (tout m'a l'air en ordre : le fichier CowDirectives.lexer appartient bien au projet, notamment)
Il doit y avoir quelque chose qui cloche, mais quoi ? (en particulier, ce qui me chiffonne le plus, c'est que sur les autres fichiers ça a l'air de passer correctement)
cs_Forman Messages postés 600 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 6 avril 2010 1
27 août 2006 à 19:08
Tu peux essayer avec le projet COW lui-même (mais dans ce cas va dans le menu PreProcessors->Options et désactive le déclenchement automatique lorsqu'un projet est compilé sinon ça fera tout planter). Puis ouvre le projet, et dans le menu PreProcessors cliques sur Process current project, ça devrait déclencher les preprocessors utilisés pour faire le projet COW_D7. Tu peux aussi utiliser les préprocesseurs avec les 2 autres projets que j'ai mis sur le site que j'ai mentionné dans un commentaire plus haut.
cs_Jean_Jean Messages postés 615 Date d'inscription dimanche 13 août 2006 Statut Membre Dernière intervention 13 décembre 2018 3
27 août 2006 à 18:55
Ok Forman,
c'est installé, mais ç'est un peu compliqué pour moi...

Tu dis qu'on peut activer les pré-processeur simultanément avec celui de l'IDE!?
Peut-on voir les messages de ton compilateur sur un projet *.dpr exisistant? Marche à suivre?

Je le garde en réserve pour l'instant au cas ou des utilisateurs montrent des cas concrets d'application...
Tu me rapelles ma jeunesse lorsque j'avais inventé une usine à gaz avec des transistors pour faire des additions, alors que les calculatrices voyaient à peine le jour!
Sacré boulot en tout cas!

Bonne continuation!
Merci pour tes éclaircissements:)
jean_jean
cs_Forman Messages postés 600 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 6 avril 2010 1
27 août 2006 à 01:20
Non, tu n'as rien oublié, CustomModuleClass est dans le répertoire du package PreProcessors. Ajoutte-le dans le chemin de recherche du projet COW_D7 (click droit ou menu Projet->Options, puis ajoutte le répertoire qui contient CustomModuleClass.pas dans le "search path" ou le "chemin de recherche" en français, sous l'onglet "directories/conditionals" de la boîte de dialogue des options du projet).

Tu auras le même problème avec d'autres unités je pense, il te suffit de faire pareil à chaque fois.
cs_Jean_Jean Messages postés 615 Date d'inscription dimanche 13 août 2006 Statut Membre Dernière intervention 13 décembre 2018 3
27 août 2006 à 01:04
Merci forman pour ces précisions!
ça l'air costaud, mais j'ai besoin à terme de réaliser un interpréteur de langage naturel spécifique, ça devrait coller! Si je comprendo, car peut être, est-ce 1 peu costaux pour mes neurones!!! mais bon!

je n'étais pas sur la zone administrateur de mon ordi, c'est pour cela qu'il refusait d'installer de nouveaux composants.
J'ai donc réussi à installer les2 premiers, mais pour Cowdata, ça plante:

[Erreur fatale] COWData.pas(7): Fichier non trouvé : 'CustomModuleClass.dcu'
est-ce que j'ai oublié des petits au passage?

Merci pour tes éclaircissements!

jean_jean
cs_Jean_Jean Messages postés 615 Date d'inscription dimanche 13 août 2006 Statut Membre Dernière intervention 13 décembre 2018 3
26 août 2006 à 10:35
Bonjour forman,

Je suis récent sur le site, mais de la génération des dynausores en informatique (Z80...) Je me suis intéressé à l'intelligence artificielle; est-ce que ton code est en rapport?
Bon en tout cas, le dynamisme de ce site et de ta créativité fait plaisir!
j'essaye d'installer ton code sur ma version 7 et je t'en reparles:
tu dis devoir installer les packages à commencer par OTAExpress_D7.dpk. en faisant installer des paquets du menu composant, je ne trouve pas l'extension *.dpk, mais dans le bouton ajouter, il n'y a que *.bpl ou *.dpc ? Peux-tu m'éclairer?
Merci à toi!

Jean_Jean
cs_Forman Messages postés 600 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 6 avril 2010 1
7 août 2006 à 12:18
Oui, je pense que c'est tout à fait faisable. Il faudrait d'abord définir le langage "bambin" et en faire un lexer/parser avec COW, puis un preprocesseur pour le traduire en Delphi à partir de là. Dans OTAExpress, il y a un composant TOTASyntaxHighlighter qui permet de définir de nouvelles mises en valeur de la syntaxe pour d'autres langages, il faudrait aussi en faire un personnalisé pour colorier le source dans l'éditeur (sachant toutefois que les éléments syntaxiques définis dans Delphi sont ceux du C/Pascal/HTML, il faudrait les adapter au nouveau langage).
J'ai plusieurs projets en cours (mais ça n'avance pas très vite) à ajoutter dans les pré-processeurs:
-Un module qui permet de gérer une classe hébergée sur un programme serveur depuis un client comme si elle était en local (c'est à dire qu'on peut appeler ses méthodes directement depuis le client comme si elle était créée dans le programme client). Le préprocesseur se chargerait de générer le code pour passer les paramètres d'appels des méthodes selon un protocole quelconque (TCP/IP ou pipe par exemple).

-Un module pour convertir du C/C++ automatiquement en Delphi (je suis en train d'apprendre le C++ ;-)

-Un module pour intégrer un langage fonctionnel dans Delphi de type CAML par exemple

Merci pour tous les commentaires, ça fait plaisir car c'est mon plus gros projet jusque là
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
7 août 2006 à 11:45
Salut Forman,
désolé mais j' ai pas le temps de voir ta source ...
Mais je voulais te féliciter pour cette source: unique !!!

Dis moi une chose:
peut on penser programmer grace à cette source un pseudo langage pour banbins avec des commandes très simples pour apprendre à faire un algorithme ???
Ex.:

Si blabla
alors
faire_ça
sinon
faire_cela


Répeter
maFonction
jusqua ...
cs_OHDelphi Messages postés 1 Date d'inscription jeudi 27 novembre 2003 Statut Membre Dernière intervention 7 août 2006
7 août 2006 à 10:46
C'est tout bonnement impressionant !
Au delà, du but de ce source je pense que les moins aguéris d'entre nous y trouveront de quoi augmenter leur connaissance de façon significative pour peu de prendre le temps d'essayer de comprendre le code source. Je vais m'y plonger de ce pas ;)
Encore bravo pour ce travail !
cs_Forman Messages postés 600 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 6 avril 2010 1
6 août 2006 à 21:55
Exactement, c'est à ça que ça sert.
Au départ, je ne voulais faire qu'un générateur de parsers, puis une chose en entrainant une autre j'ai décidé de faire l'intégration dans Delphi dans un autre package. Pour définir un nouveau préprocesseur, il suffit alors de créer un nouveau composant TPreprocessor avec Registered=True dans un package.

Ce composant a un événement
OnProcessPrePasFile:procedure(Sender: TObject; PrePasFile: IOTAPrePasFile; PCUFile: IPCUFile; Directives: PDirectiveArray; ProgressManager: IOTAProgressManager);
il est appelé lors de toute compilation d'un projet (application, package...) pour tous les fichiers *.ppas qu'il contient.
-PrepasFile: le fichier *.ppas concerné (permet d'accéder au source, et à diverses informations, comme la position des blocs interface/implementation du fichier). Toute modification est soit appliquée au fichier si le fichier n'est pas ouvert dans l'IDE, sinon au fichier lui-même dans l'éditeur. De plus, cette interface permet d'émettre des messages d'erreur ou des warnings directement dans l'éditeur associé au fichier.
-PCUFile: une interface vers un fichier *.pcu pour stocker des informations (pour éviter de devoir refaire des calculs longs si les fichiers n'ont pas été modifiés, l'équivalent des *.dcu de Delphi)
-Directives: un tableau contenant les directives associées au préprocesseur: à la base, tout préprocesseur travaille sur des directives qui sont extraites automatiquement du code {#CAPTION ...} où "CAPTION" est sa propriété Name. Mais on peut tout à fait travailler autrement, c'est juste une convention que j'ai utilisée pour moi.
-ProgressManager: pour afficher des barres de progression pendant la compilation.

Tout composant TPreprocessor enregistré se voit attribuer un sous-menu dans le menu principal de Delphi, sous le menu Pre-processors. Les événements OnGetDesignerPanel et OnGetOptionsPanel permettent respectivement de définir un panneau éventuel personnalisé dans le designer de code pour les directives ou un panneau dans la fenêtre des options. OnShowHelp permet de faire afficher un fichier d'aide si nécessaire depuis le menu associé.

L'autre composant important du package PreProcessors est TCustomModuleClass. Ce composant permet de définir de nouveaux types de fichiers susceptibles d'être utilisés par les préprocesseurs. Par exemple, le préprocesseur COW travaille sur des fichiers *.lexer et *.parser. Les composants TCustomModuleClass permettent d'intégrer ces nouveaux types de fichiers dans le menu des préprocesseur, de définir le source des nouveaux fichiers créés, etc...

L'intérêt de tout cela est que c'est intégré à Delphi, il suffit juste de définir quelques événements de composants pour créer un nouveau préprocesseur dans Delphi.
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
6 août 2006 à 20:31
en fait, le pre-processing c'est pour precompiler la source avant le compilateur principal.
ce qui est interressant c'est d'ajouter un langage macro dans le pascal objet pour definir de nouvelle actions possible avant compilation finale.

en gros donc, le preprocesseur permet de transformer les petites macro en code pascal/assembleur.

on pourrait par exemple ajouter une extention c++ dans le pascal objet pour prendre en compte certaine operandes comme :
+= -= *= /= ++ -- ** && || ! != ?:

et le preproc serait charger de convertir ces symboles en langage pascal avant le passage de la source dans le compilateur de delphi.

enfin, si je me trompe pas.
Oniria Messages postés 292 Date d'inscription dimanche 14 mars 2004 Statut Membre Dernière intervention 18 décembre 2014 3
6 août 2006 à 09:02
Bonjour,

J'aimerais poser une petite question bête : A quoi ca sert exactement ?
Je suis débutant en delphi et je ne comprend pas bien à quoi sert un pré processeur dans des applications ? Lorsque je construit une application, j'assemble un ensemble d'unité ensemble pour la construire, mais là ???
Ce n'est pas une critique loin de la, mais j'aimerais comprendre afin de l'utiliser plus tard.
cs_Forman Messages postés 600 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 6 avril 2010 1
5 août 2006 à 09:25
Ca va bientôt faire un an que j'ai commencé. J'y suis allé par petites touches, à mesure que j'avais besoin de nouvelles fonctionnalités pour mes progs à moi. Ceci dit, il y a encore des choses à améliorer, et il manque encore des choses pour qu'il soit complet...
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
5 août 2006 à 05:58
qu'un seul mots a dire ... enorme.

il faudrat que je jette une oeuil dans les sources ça a l'air super.

une seule question : combien de temps de developpement il y a la dessus ?
Rejoignez-nous