|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : septembre 2008 Messages : 7 ![]() |
Bonjour,
J'essaye de réaliser un "parser" pour le langage utilisé par TaskJuggler (un outil de gestion de projets). Le langage permet de décrire les tâches, les ressources, les délais... Et il y a notamment le concept de scénarios qui permet en résumé de décrire des variations autour d'un projet. On aura par exemple un scénario où le projet aura un retard de plusieurs jours et un autre où certaines ressources seront plus rares. Le langage permet d'avoir une arborescence de scénarios sous la forme suivante : Code :
Quelqu'un aurait-il un exemple simple de "parser" en menhir ou en ocamlyacc pour ce type de structure ? Merci. Stéphane. |
||
|
|
00
|
|
|
#2 | ||
|
Membre émérite
![]() ![]() Phrene Caco Inscription : janvier 2009 Messages : 525 ![]() |
Bonjour,
Que trouve-t-on à l'intérieur des accolades d'un scénario interne (je veux dire, sans scénario imbriqué à l'intérieur) ? Avec ocamlyacc, tu peux utiliser quelque chose comme ceci (attention, c'est juste une ébauche, le code n'est pas fonctionnel). J'ai noté MyTree.tree la structure arborescente qui représente un scénario : Code :
Cordialement, Cacophrène
__________________
Blog OCaml de pied en cap Tuto Implémentation d'un lexique avec OCaml Projets OCamlBoggle MazeML OCamlTeX |
||
|
00
|
|
|
#3 | ||||||||||
|
Invité de passage
![]() Inscription : septembre 2008 Messages : 7 ![]() |
Bonjour,
Merci pour ta réponse. Je n'ai pas essayé avec Genlex parce que je souhaite justement utiliser concrètement un outil du type yacc. Et le langage proposé par TaskJuggler me paraît suffisamment complexe pour justifier l'utilisation de ce type d'outil. Dans un scénario on peut seulement avoir un autre scénario et/ou un seul attribut "active" qui est un booléen : Code :
Code :
Code :
Code :
J'ai essayé ceci : Code :
Merci. Stéphane. |
||||||||||
|
|
00
|
|
|
#4 | ||
|
Membre Expert
![]() Inscription : avril 2007 Messages : 829 ![]() |
Une solution (pas testée) est de dire qu'un scénario est soit une imbrication de scénario comme tu fais, soit une liste de scénarios ("au même niveau"):
Code :
|
||
|
|
00
|
|
|
#5 | ||||
|
Invité de passage
![]() Inscription : septembre 2008 Messages : 7 ![]() |
Menhir produit alors l'erreur suivante :
Code :
Code :
|
||||
|
|
00
|
|
|
#6 | |||
|
Membre émérite
![]() ![]() Phrene Caco Inscription : janvier 2009 Messages : 525 ![]() |
Bonjour,
Je note que le problème évoqué dans cette discussion est marqué comme résolu : c'est très bien. Quoi qu'il en soit, je voudrais revenir un peu sur cette histoire de module Genlex et ajouter mon grain de sel à la discussion. Citation:
Cependant, pour d'éventuels futurs lecteurs du forum : sans connaître particulièrement TaskJuggler, je constate que le « langage » présenté ici est plutôt simple et ne justifie donc pas vraiment, à lui seul, le recours à un outil de type yacc/menhir. En fait, je ne vois pas de grammaire complexe à mettre en œuvre qui nécessite des outils élaborés comme yacc/menhir. Rapidement, le code suivant (niveau brouillon) devrait venir à bout de tous les exemples donnés ici dès lors que le nom du scénario suit les conventions lexicales de caml (par exemple, sc111 est valide mais pas sc1.1.1) : Code :
Attention, ce code nécessite obligatoirement la présence d'une paire d'accolades après scenario, même quand celui-ci est vide. On pourrait développer pour lever cette contrainte, mais ça n'apporterait rien de plus à l'exemple (sauf d'inutiles complications). Cordialement, Cacophrène
__________________
Blog OCaml de pied en cap Tuto Implémentation d'un lexique avec OCaml Projets OCamlBoggle MazeML OCamlTeX |
|||
|
00
|
Copyright © 2000-2013 - www.developpez.com