Analyseur syntaxique en Java

Résolu
VerInfo Messages postés 20 Date d'inscription mercredi 14 mars 2012 Statut Membre Dernière intervention 3 juillet 2012 - 14 mars 2012 à 11:26
VerInfo Messages postés 20 Date d'inscription mercredi 14 mars 2012 Statut Membre Dernière intervention 3 juillet 2012 - 15 mars 2012 à 09:46
Salut,

Je cherche un code en JAVA qui me permet d'analyser une chaîne de caractère et indiquer s'il existe une erreur syntaxique Exemple : (a*b) "la chaîne à analyser" mon programme doit lever une exception si une erreur est détectée par exemple si je saisie "(a*b" il doit mentionner qu'une parenthèse manquante avec précision de l'endroit de l'erreur.

Donc mon programme doit fournir le même traitement que celui de la classe "PatternSyntaxeException" du paquatge Regex .

j'espère avoir des réponses le plus tôt possible.

Merci d'avance pour votre aide .

26 réponses

VerInfo Messages postés 20 Date d'inscription mercredi 14 mars 2012 Statut Membre Dernière intervention 3 juillet 2012 2
14 mars 2012 à 20:49
Donc j'ai ces deux classes mais j'arrive pas à les utiliser à fin de répondre à mes besoins ,et avoir un programme exécutable qui permet de détecter et indiquer les erreurs générées

Si tu peux m'aider à m'en sortir je te serais vraiment reconnaissante
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 369
15 mars 2012 à 08:43
Tes classes sont pleines d'erreurs...

if (symbole =="^") : ca ne peut pas fonctionner, c'est une comparaison des références :

Essayes ce code :

String s1="^";
String s2="^";
System.out.println(s1==s2);
//Retourne false (les références vers les objets sont différentes)

//Il faut utiliser equals :
System.out.println(s1.equals(s2));
//Retourne true
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 369
15 mars 2012 à 08:48
tu ne respectes pas les conventions de nommage en java.

Les noms de tes méthodes et de tes attributs ne sont pas explicites.

Tu obtiens un code spaghetti : beaucoup de if et de switch imbriqués.
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 369
15 mars 2012 à 08:55
Surtout, ton problème principal c'est que tu n'as pas assez réfléchis avant de te lancer :

Tu ne sais pas comment tu vas réaliser ton analyse syntaxique et pourtant, tu as déjà beaucoup de code écrit et qui plus est, tu n'as pas l'air d'avoir testé quoi que ce soit.

A ta place, je repartirais de zéro en me fixant des objectifs simples et en proposant sur le papier dans un premier temps des algorithmes qui permettent de résoudre tes problèmes.

Si tu veux réaliser une programmation objet propre, je te conseil de créer plusieurs classes de service avec des utilités différentes. Par exemple :
- une classe qui permet de déterminer le type de ligne : affectation, déclaration, appel de méthode sur une ligne simple
- Une classe qui permet de décomposer une ligne et qui appellera la première classe
- En fonction du type de ligne simple une classe qui te permet de vérifier la syntaxe

Ce n'est qu'un début, juste une piste de travail, mais de cette manière, tu pourras avoir des classes un peu plus modulaires et plus simples, ton code sera donc plus facile à comprendre.

Il faut savoir que tu t'engages sur un travail long et assez complexe. Dans ce cas, il faut prendre le temps de réfléchir.

Est ce que tu connais le design pattern Composite (au vu de la qualité de ton code, je dirais non :) ), il peut vraiment te rendre de grand services sur la décomposition d'une ligne de code, je posterai un petit tutoriel dans la matinée sur ce pattern, et je te donnerai le lien.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 369
15 mars 2012 à 09:08
voilà de quoi comprendre ce qu'est le pattern composite :
http://lenseignant.free.fr/?p=17
http://smeric.developpez.com/java/uml/composite/

Et un exemple pour l'analyse syntaxique :
http://www.javafr.com/codes/CALCULATRICE-AVEC-PARSEUR-EXPRESSION-MATHEMATIQUE_53342.aspx

J'ai posté cette source il y a quelques temps, ce n'est pas vraiment la même chose que toi, c'est de l'analyse syntaxique sur une expression mathématique pour en déterminer le résultat. C'est d'un niveau assez élevé, je ne sais pas si tu peux comprendre le code.
0
VerInfo Messages postés 20 Date d'inscription mercredi 14 mars 2012 Statut Membre Dernière intervention 3 juillet 2012 2
15 mars 2012 à 09:46
merci bien pour ton aide ainsi que tes conseilles et je vais prendre en considération tes remarques

mais ce que j'ai voulu savoir un exemple d'algorithme qui me permettra de faciliter la tâche, car j'ai pleins de truc dans ma tête et je sais pas d'où je vais commencer

merci encore une fois
0