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

  FORUM HardWare.fr
  Programmation
  Java

  [JavaCC]Problème pour créer un mini-parser pour prog de math

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[JavaCC]Problème pour créer un mini-parser pour prog de math

n°963370
Oreste
Posté le 27-01-2005 à 09:04:25  profilanswer
 

Bonjour,  
 
Dans le cadre de mon projet de fin d'année, je tente d'utiliser JavaCC mais je bloque avec l'utilisation de ce dernier.  
En effet mon problème est plutôt simple : l'utilisateur entre une formule de calcul propositionnel du style "p | q" ou p et q sont mes variables et "|" est le symbole représentant la disjontion, en gros admettons que c'est une simple addition entre p et q  
De cette formule je veux savoir si elle est conforme (grace au fichier de grammaire si j ai bien compris) et récupérer ainsi les variables entrée "p" et "q"  
Bien sur l'utilisateur peut entrer une formule complexe du genre "(p | q) | r) & z)" donc mon parser doit contrôler si cette formule est bonne et me retourner chaque expression dans un tableau genre "a = (p | q)" et "b = "a | r"...  
La suite de mon programme Java s'occupe ainsi de la résolution de la formule (avec l'établissement de la table de vérité... mais ca je sais faire )  
 
Par exemple si il entre un truc du genre :  
- "(p | q) | r) & )" --> aucune variable après le "&" donc faux.  
- "(p | q) | r) & z" --> parenthèse non fermée.  
Et ben là le parser retourne une erreur...  
 
Bref ca ne semble pas compliqué dans la forme mais j'ai potassé pas mal de tutoriaux et j'ai du mal pour ce qui est de la création des fonctions qui analyse...  
Donc si quelqu'un pouvait me mettre sur la voie pour résoudre ce problème, bref par où commencer ca serait cool  
 
Merci bcp.

mood
Publicité
Posté le 27-01-2005 à 09:04:25  profilanswer
 

n°963415
fredatisi
Posté le 27-01-2005 à 09:55:33  profilanswer
 

j'ai p't'et pas tout compris (il est encore tot là) mais tu veux valider tes expressions d'un point de vu synthaxique ou sémantique? Si c'est synthaxiquement parlant, je dirais expressions régulières

n°963868
raytaller
Posté le 27-01-2005 à 17:07:47  profilanswer
 

Salut,
 
j'ai fait un interpréteur de formules mathématiques en ActionScript, le langage de flash (basé sur l'ECMA script, donc ressemblant au javascript, normalement assez compréhensible pour un développeur java)
 
url :
http://tom.rethaller.free.fr/proje [...] terpreter/
 
 
en gros, j'ai appliqué un algo de conversion de chaîne en notation polonaise inversée (RPN en english) (( exemple de RPN :  
 
 ((a+b)*c)/2 => a b + c * 2 /  
 
ça permet de se passer des parenthèses, en respectant les priorités (ici ça se traduit par "je prends a, je prends b, j'applique une addition entre les 2, puis, je prends le resultat, je prends c, j'applique une opération de multiplication entre les 2, puis.." etc... )))
 
 
je sais pas si c'est faisable facilement avec des regexp mais ça je connais pas du tout (bonne résolution 2005 => apprendre les regexp)
mais en tous cas avec la RPN c'est pas si sorcier que ça.
 
en gros, ça marche à base de piles, dès que je suis chez moi, j'essaye de retrouver tous ces liens sur la conversion, parce que l'algo est compréhensible mais quand même pas facile à trouver comme ça

n°963872
raytaller
Posté le 27-01-2005 à 17:10:25  profilanswer
 

juste pendant que j'y suis, moi en gros, j'avais fait :
 
* prétraitement de la chaîne (fastoche, 2, 3 remplacements, quelques tests)
* conversion RPN
* evaluation (là c'est gâteau, c'est de la LIFO directement)
 

n°963924
Oreste
Posté le 27-01-2005 à 18:07:45  profilanswer
 

Merci énormément raytaller ca s approche bcp de ceux ke je veux faire je vais potasser ca ce week end et voire comment integrer ca sous forme de grammaire avec JavaCC en tout cas merci bcp d avoir pris le temps de me répondre...
 
Si d autre on de l aide sur JavaCC envoyez :)

n°963984
raytaller
Posté le 27-01-2005 à 19:07:57  profilanswer
 

voilà de la doc théorique et algo :
 
http://miami.int.gu.edu.au/dbs/701 [...] ect05.html
 
 
 
en gros, le truc le plus important c'est :
 


initialise stack and postfix output to empty
while(not end of infix expression)   {
   get next infix item
   if(item is value) append item to postfix output
   else if(item == ‘(‘) push item onto stack
   else if(item == ‘)’)   {
       pop stack to x
       while(x != ‘(‘)  
          append x to postfix output and pop stack to x
   }
   else    {
       while(precedence(stack top) >= precedence(item))
          pop stack to x and append x to postfix output
       push item onto stack
   }
}
while(stack not empty)    
   pop stack to x and append x to postfix output


 
 
bon courage :)


Message édité par raytaller le 27-01-2005 à 19:08:35

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

  [JavaCC]Problème pour créer un mini-parser pour prog de math

 

Sujets relatifs
[MFC/VC++] Problème de pointeurpb àl'execution car prog trop gros pour DEV-CPP
probleme de quote et de guillemetprobleme avec variable
[MFC/OPENGL] Problème de chargement de texture[CSS] problème avec les id
[Java] [LeJOS] Probleme de Listener en parallèleProblème de droits d'un partage
Probleme de l'executableprobleme dll
Plus de sujets relatifs à : [JavaCC]Problème pour créer un mini-parser pour prog de math


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