salut
je veux creer une petite application(interface graphique) qui contient un text area
cette app a pour objectif de verifier le syntaxe d'un text ecrit (comme un compilateur)
quand je fenir a ecrire mon texte un bouton appel un algorithme qui verifie ce qui est ecrit d'apres une petite base de donnee (fichier texte simple par exemple ou un xml)
si quelqu'un a une idee ou un exemple similaire comment former cette algorithme,priere de me sauver avec.


Bonjour,
2 fois le même sujet en 2 jours, ça doit vraiment être urgent.... Le problème est que je ne comprends pas vriament ni la question ni le problème.
Ecrire une petite application avec un textarea et qui exécute une fonction lors de l'appuie d'un bouton me semble être une fonctionnalité de base. Il existe de nombreux exemples sur ce point.
Le point le plus interressant reste l'analyse syntaxique. Mais la le sujet est vaste. Tout dépend ce que tu entends par "analyse syntaxique". Tout cela ressemble fort à un TP "scolaire", donc je suppose que la syntaxe n'est pas compliquée et vu la demande, ça ressemble beaucoup à un court relativement simple. Si c'est une simple analyse de texte (comptage des mots, des signes etc...), je propose d'utiliser simplement l'objet StringTokenizer ce qui devrait être suffisant. Sinon, il existe un desgin pattern pour faire ce travail qui peut convenir tout à fait, c'est le "pattern interpreter". A consulter.... Voilà en expérant que ça peut t'aider
salut
en faite ce travail est une "tache" d'un projet de fin d'etudes
pour le moment il me faut que de verifier la bonne disposition du code ecrit
comment dire ai je
par exemple j'ai le code suivent: (un code referencemais il existe d'autres)
tout ce qui est demandee de moi et mon binome est de verifier la bonne ecriture de ce code ( espacement , retour en ligne, ; ,....)
autrement supposant que dans l'application l'utilisateur ecrit le suivant :
donc le programme compile ce qui est ecrit est indique la presence des erreurs et leur lignes...
je suis en train d'essayer de rediger le code , et je veut le poster
je vous signale que je suis debutant en java
ainsi nous somme presse par le temps et je croix que l'etude d'analyse syntaxique prend beaucoup de temps (il nous reste 1 mois et 1/2) et ce qu'une tache du projet
Si j'ai bien compris, tu dois pouvoir analyser du code et rechercher les erreurs dedans, donc la solution serait de:
parser le string contenant tout le texte grace à la methode split("\n");
ainsi, tu recuperes un tableau avec une ligne de texte par cellule
tu split(" ") chaque cellule du tableau et tu ajoutes le resultat du split à un Vector
public void algo(String texte){ Vector<String[]> listePhrases = new Vector<String>(); String[] lignes = texte.split("\n"); for (String ligne : lignes) listePhrases.add(ligne.split(" "); // ensuite, tu parcours tout les mots un par un for (String[] ligneTab : listePhrases) for (String mot : ligneTab) if (isMotCle(mot)){ // tu recuperes les "regles" du mot // ex: le mot clé "if" doit etre suivi d'une parenthese et on ne doit pas tenir compte des espaces entre "if" et "(" // tu indiques l'erreur ou tu passes à la suite si il n'y a pas d'erreur } } public boolean isMotCle(String str){ // tu parcours la liste des objets de type motsClés et tu recherches un objet ayant pour identifiant str } }pour les regles, tu crées une classe motsClés ayant pour attributs String motClé (qui sert d'identifiant),
ainsi que differents booléens, int ou char (par exemple le charactere qui doit suivre apres le mot clé,...)
et tu crées un instance de la classe motsClés pour chaque mot clé
pour les regles (les variables de la classe motsClés) c'est à toi d'adapter au codage de ton texte à analyser, cette partie est la plus complexe et je peux pas t'aider pour ca
salut
voici ce que je fait avant de lire ton reponce
/* * Editor.java * * Created on 17. Mنrz 2008, 17:13 */ package Interface; /** * * @author RAMZI */ public class Editor extends javax.swing.JFrame { /** Creates new form Editor */ @SuppressWarnings("deprecation") public Editor() { initComponents(); Compile.setEnabled(false); } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { jPanel1 = new javax.swing.JPanel(); jScrollPane2 = new javax.swing.JScrollPane(); Consol = new javax.swing.JTextArea(); jScrollPane1 = new javax.swing.JScrollPane(); Editor = new javax.swing.JEditorPane(); Compile = new javax.swing.JButton(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("Editor")); Consol.setColumns(20); Consol.setEditable(false); Consol.setRows(5); jScrollPane2.setViewportView(Consol); Editor.addKeyListener(new java.awt.event.KeyAdapter() { public void keyReleased(java.awt.event.KeyEvent evt) { Enable_keyReleased(evt); } }); jScrollPane1.setViewportView(Editor); Compile.setText("Compile"); Compile.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { CompileActionPerformed(evt); } }); javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup() .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 620, Short.MAX_VALUE) .addGap(18, 18, 18) .addComponent(Compile) .addContainerGap()) .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 717, Short.MAX_VALUE) ); jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup() .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 316, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(Compile))) ); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addContainerGap()) ); pack(); }// </editor-fold>//GEN-END:initComponents private void CompileActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_CompileActionPerformed String Resultat_compile = ""; String ch1 = null; String ch2 = null; String[] tab_ref_chaine = {"yxcv b", "asdf", "qwertz", "ramzi"}; int cont_error = 1; //verification si l'editor est vide ou nom if (Editor.getText().isEmpty()) { Resultat_compile = "Nothing to compile"; } else { //recuperation de tout le text ecrit dans une chaine de caractere String chaine = Editor.getText(); //le spliter dans un tableau de string String[] tab_chaine = chaine.split("\n"); //debarrassement des espaces doublee //a refaire for (int i = 0; i < tab_chaine.length; i++) { chaine = ""; chaine = tab_chaine[i]; tab_chaine[i] = ""; for (int j = 0; j < chaine.length(); j++) { int cont = chaine.indexOf(" "); ch1 = chaine.substring(cont + 1); if (ch1.indexOf(" ") == 0) { ch1 = ch1.substring(1); } ch2 = chaine.substring(0, cont + 1); } chaine = ch2 + ch1; // re remplissage du tableau avec les chaine sans occurences des espaces tab_chaine[i] = chaine; } // for (int i = 0; i < tab_chaine.length; i++) // { // Resultat_compile = Resultat_compile.concat(tab_chaine[i] + "\n"); // } //compilation par rapport a un reference // System.out.println("\ntab_chaine[tab_chaine.length-1] :"+tab_chaine[tab_chaine.length-1]); // System.out.println("tab_chaine[tab_chaine.length-1].length() :"+tab_chaine[tab_chaine.length-1].length()); // System.out.println("dernier char de dernier element du tableau :"+tab_chaine[tab_chaine.length-1].substring(tab_chaine[tab_chaine.length-1].length()-1)); for (int i = 0; i < tab_chaine.length; i++) { // System.out.println("tab_chaine[" + i + "] :" + tab_chaine[i]); if (tab_chaine[i].equals(tab_chaine[tab_chaine.length - 1])) { tab_chaine[i] = tab_chaine[i].concat(" "); } for (int j = 0; j < tab_ref_chaine.length; j++) { // System.out.println("extraction d'element "+i+" a comparer avec la ref "+j+" de ref :"+tab_chaine[i]); if (!tab_chaine[i].substring(0, tab_chaine[i].length() - 1).equals(tab_ref_chaine[j])) { // System.out.println("l'element "+tab_chaine[i]+" est different de "+tab_ref_chaine[j]); if (j == tab_ref_chaine.length - 1) { Resultat_compile += "Error in Line(s): "+cont_error+" . "; cont_error += 1; } } else { // System.out.println("l'element "+tab_chaine[i]+" est le meme que "+tab_ref_chaine[j]); Resultat_compile = "Compile Seccessful"; } } } //System.out.println("nb d'erreur : "+cont_error); } Consol.append("Compiling...\n"); Consol.append(Resultat_compile + "\n"); }//GEN-LAST:event_CompileActionPerformed private void Enable_keyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_Enable_keyReleased Consol.setText(""); if (Editor.getText() != "") { Compile.setEnabled(true); } }//GEN-LAST:event_Enable_keyReleased public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new Editor().setVisible(true); } }); } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton Compile; private javax.swing.JTextArea Consol; private javax.swing.JEditorPane Editor; private javax.swing.JPanel jPanel1; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JScrollPane jScrollPane2; // End of variables declaration//GEN-END:variables }note : tu peut compiler ce code pour voir le resultat
"je developpe avec netbeans 6 "
il reste quelques truc tel que :
-le code ne verifie que le dernier element de tab_ref_chaine dans la partie de verification des mots( possible qu'il faut changer le boucle for par while)
- j'arrive pas a concatuner les "cont_error" dans la chaine "Resultat_compile"
//debarrassement des espaces doublee //a refaire for (int i = 0; i < tab_chaine.length; i++) { chaine = ""; chaine = tab_chaine[i]; tab_chaine[i] = ""; for (int j = 0; j < chaine.length(); j++) { int cont = chaine.indexOf(" "); ch1 = chaine.substring(cont + 1); if (ch1.indexOf(" ") == 0) { ch1 = ch1.substring(1); } ch2 = chaine.substring(0, cont + 1); } chaine = ch2 + ch1; // re remplissage du tableau avec les chaine sans occurences des espaces tab_chaine[i] = chaine; }D'apres ce que j'ai compris, tu veux enlever tout les espaces du string contenu dans tab_chaine[i]
il suffit de faire:
for (int i = 0; i < tab_chaine.length; i++) { tab_chaine[i] = tab_chaine[i].replaceAll(" ", ""); }Pour les autres problemes, j'ai regardé ton code que tres rapidement donc je peux pas encore te donner de solution maintenant
salut
pour les espaces c que je veut exactement est de enlever tout les espaces et les remplacer par un seul espace
c a dire si quel qu'un a taper plus qu'un espace dans une phrase le code enleve l'excee des espaces
pour ton idee a propos du code qui verifie le syntaxe je pense que c'est un bon demarche
je veut essayer a rediger le code de ismotcle....
autre chose :
je ne maitrise pas bien les vecteur (dans les cours je ne trouve pas des exemples expliquee pour ce type de declartion :
Vector<String[]> ...si tu a des lien utils merci de m'envoie...
bonne journee
pour les vector de string, c'est tres simple:
Vector<String> monVect = new Vector<String>(); // ajout d'un String: monVect.add("bfjsbfgrsdkgnbkrd"); monVect.add("ebfhsebfbsgbjrn,hgtn thn iutnh"); // la gestion par defaut est en FIFO, c-a-d que tous les elements sont rangés par ordre d'ajout // récuperer un element: String str = monVect.get(indexDuString); // enlever un élement: monVect.remove(indexDuString): // ou bien monVect.remove(str); // enleve le premier element du vecteur qui répond positivement à l'expression booléene monVect.get(i).equals(str)tu as toutes les methodes sur le site de sun:
http://java.sun.com/j2se/1.4.2/docs/api/java/util/Vector.html
Pour ton histoire d'espaces, si j'ai bien compris, tu veux enlever les doubles espaces
pour ca tu fais:
//recuperation de tout le text ecrit dans une chaine de caractere String chaine = Editor.getText(); //le spliter dans un tableau de string String[] tab_chaine = chaine.split("\n"); //debarrassement des espaces doublee //a refaire String[] tabMots; for (int i = 0; i < tab_chaine.length; i++) { tabMots = tab_chaine[i].split(" "); tab_chaine[i] = ""; for (String str : tabMots) if (!str.equals("")) tab_chaine[i]+=str+" "; }ok je veut essayer tout ca
merci
si je trouvera d'autres problemes je les posterai