Analyseur d'expression d'une fonction à pls variables

Résolu
ulysse2531 Messages postés 5 Date d'inscription vendredi 7 juillet 2017 Statut Membre Dernière intervention 24 juillet 2017 - 7 juil. 2017 à 10:39
Whismeril Messages postés 19019 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 14 avril 2024 - 21 juil. 2017 à 19:53
Bonjour,

Je dois effectué un "petit" programme en Java dans le cadre de mon PFE. On m'a demandé de le faire en Java (super j'ai découvert un nouveau langage POO).
Dans ce projet j'ai besoin de traduire une expression mathématique entré par un utilisateur (ex : x1+x1*x2+x3).
J'ai donc considérer de séparer la chaînes en unité "mathématiques" (ex : x1+sin(3*x2) => "x1", '+', "sin", '(', 3, '*',"x2" et ')' ). Mon soucis vient de la reconnaissance de mes variables.
Ma question est simple : comment faire comprendre que x1 est une unité ?

Voici la partie de mon code pour les variables :
// Rencontre d’une variable, d’un nom de fonction (sin,…) donc un mot 
Else if(lexical.ttype=StreamTokenizer.TT_WORD){
      String s = lexical.sval.toLowerCase();
      // rencontre de “x” suivit ou non par un nombre
      If (s.equals(« x »)){ 
            Lexical.nextToken() ;// on passe au caractère suivant pour l’analyser et voir si un chiffre suit « x » immédiatement
/* Est-ce que c’est bien ce qu’il fait ???? */
            If(lexical.ttype==StreamTokenizer.TT_NUMBER){
                  Double res = lexical.nvat; // sauvegarde du chiffre
                  Resultat = new Variable(s+res) ; // création de la variable
                  Lexical.nextToken() ;
            }
            Else if (lexical.ttype!=StreamTokenizer.TT_NUMBER){ // on a une seule variable “x”
                  Resultat = new Variable(s);
                  Lexical.nextToken();
            }
            Else { // erreur de syntaxe 
throw new ErreurDeSyntaxe(s+": identificateur non reconnu");
            }
      }
      Else if (s.equals(“sin”)){
Lexical.nextToken():
Expression expression= analyserExpression(); 
            Resultat = new Sinus(expression);
      }
      // … pour cos, exp,…
      // … 


Merci de me dire vos idées.
Cordialement

2 réponses

ulysse2531 Messages postés 5 Date d'inscription vendredi 7 juillet 2017 Statut Membre Dernière intervention 24 juillet 2017
21 juil. 2017 à 13:57
C'est bon j'ai trouvé... erreur très bête j'avais mal mis un nextToken()...
0
Whismeril Messages postés 19019 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 14 avril 2024 655
21 juil. 2017 à 19:52
Bonsoir,

Si je peux me permettre, je ne code pas en Java, cependant je sais une chose importante sur ce langage.
Il n'est pas orienté objet. Il est "tout" objet.
Un langage orienté objet va utiliser autre chose que les objets, du séquentiel, de l'événementiel etc...
Un langage objet ou tout objet n'utilise que des objets.
En Java un entier possède des méthodes car c'est un objet, en vba (par exemple) un entier est un type sans rien de plus.

Quand on débute ça ne paraît passe important cette différence, mais pour exploiter au mieux Java, C# et autres langages tout objet, il est important de le savoir et d'en tenir compte.
0
Whismeril Messages postés 19019 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 14 avril 2024 655
21 juil. 2017 à 19:53
PS, pense à mettre le sujet résolu, avec le lien dédié sous le titre de la discussion.
0
Rejoignez-nous