Analyseur d'expression d'une fonction à pls variables [Résolu]

ulysse2531 5 Messages postés vendredi 7 juillet 2017Date d'inscription 24 juillet 2017 Dernière intervention - 7 juil. 2017 à 10:39 - Dernière réponse : Whismeril 10542 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 14 décembre 2017 Dernière intervention
- 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
Afficher la suite 

3 réponses

Répondre au sujet
ulysse2531 5 Messages postés vendredi 7 juillet 2017Date d'inscription 24 juillet 2017 Dernière intervention - 21 juil. 2017 à 13:57
0
Utile
C'est bon j'ai trouvé... erreur très bête j'avais mal mis un nextToken()...
Commenter la réponse de ulysse2531
Whismeril 10542 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 14 décembre 2017 Dernière intervention - 21 juil. 2017 à 19:52
0
Utile
1
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.
Whismeril 10542 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 14 décembre 2017 Dernière intervention - 21 juil. 2017 à 19:53
PS, pense à mettre le sujet résolu, avec le lien dédié sous le titre de la discussion.
Commenter la réponse de Whismeril

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.