IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

petit analyseur lexical


Sujet :

Java

  1. #1
    Membre confirmé
    Inscrit en
    Février 2008
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 72
    Par défaut petit analyseur lexical
    l'objectif de ce code est d analyser a partir d un fichier texte
    "e:\text.txt" par exemple
    l' analyseur doit afficher en sortie des messages relatifs à la reconnaissance d'unités lexicales
    la chaine à analyser est stockée dans le fichier texte
    j essai ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import java.util.*;
    import java.io.*;
    public class lexical{
    	public static  void main(String [] args) throws IOException
    	{
    		Scanner sc = new Scanner(new FileReader("e:\text.txt"));
    		while (sc.hasNext())
    		{
    			String s=sc.next();
    			if(s.matches("begin|end|if|else|while|for"))
    				 System.out.println(s + " connu");
    		}
    	}
    }
    bien sur il faut ajouter autres expressions regulieres
    le programme est compilé sans probléme mais a l execution affiche
    malgré le chemin de fichier est juste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Exception in thread "main" java.io.FileNotFoundException: e:    ext.txt (Syntaxe du nom de fichier, de répertoire ou de volume incorrecte)
        at java.io.FileInputStream.open(Native Method)
        at java.io.FileInputStream.<init>(FileInputStream.java:106)
        at java.io.FileInputStream.<init>(FileInputStream.java:66)
        at java.io.FileReader.<init>(FileReader.java:41)
        at lexical.main(lexical.java:6)
     
    Process completed.
    aide moi svp

  2. #2
    Membre Expert Avatar de guigui5931
    Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2006
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 667
    Par défaut
    Apparemment java interprète \t et le remplace par un tabulation. Tu devrais essayer de le doubler.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Scanner sc = new Scanner(new FileReader("e:\\text.txt"));

  3. #3
    Membre confirmé
    Inscrit en
    Février 2008
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 72
    Par défaut
    merci
    le probléme est résolu

    j ai un question
    est qu il ya un inconvénient d utiliser la classe scanner ?

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 433
    Par défaut
    Un inconvénient je pense que oui, car en fait elle n'est apparue que dans la dernière version de Java (Java 6 il me semble) et donc ton programme ne pourra pas tourner sur une machine dont Java est aux version antérieures.

  5. #5
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par FabaCoeur Voir le message
    Un inconvénient je pense que oui, car en fait elle n'est apparue que dans la dernière version de Java (Java 6 il me semble) et donc ton programme ne pourra pas tourner sur une machine dont Java est aux version antérieures.
    En même temps le simple fait de compiler avec un JDK 6 aura le même effet donc pourquoi s'en privé.

    Si vous voulez une compatibilité avec d'anciens JDK alors il faut compiler avec la version la plus ancienne que vous voulez supporter...


    Sinon il y a plus problématique pour moi : le fichier n'est pas fermé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    		Scanner sc = new Scanner(new FileReader("e:\text.txt"));
    		try {
    			while (sc.hasNext())
    			{
    				String s=sc.next();
    				if(s.matches("begin|end|if|else|while|for"))
    					 System.out.println(s + " connu");
    			}
    		} finally {
    			sc.close();
    		}
    Autant prendre les bonnes habitudes

    a++

  6. #6
    Membre confirmé
    Inscrit en
    Février 2008
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 72
    Par défaut
    je veux dire un inconvenient dans l analyse des chaines de caractéres
    par exemple j' ajoute integer comme expression réguliere et le point virgule aussi ;
    donc integer ; est connu mais si on supprime l espace (integer ; devient integer alors l' analyseur ne connait pas integer tout seul comme un unité lexical

  7. #7
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Par défaut
    bonjour,

    Si tu souhaites faire un parser de code, il serait plus judicieux d'utiliser une grammaire !
    En java tu peux faire ça avec antlr, dans se cas la tu n'utiliserais plus la classe Scanner
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre confirmé
    Inscrit en
    Février 2008
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 72
    Par défaut
    Citation Envoyé par Alkhan Voir le message
    bonjour,

    Si tu souhaites faire un parser de code, il serait plus judicieux d'utiliser une grammaire !
    En java tu peux faire ça avec antlr, dans se cas la tu n'utiliserais plus la classe Scanner
    donc l utilisation de la classe scanner tt seul ne suffit pas
    chaque espace dans le texte ça veut dire un autre unité lexical

  9. #9
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Non, l'espace n'est pas une nouvelle unité lexicale. C'est un caractère qui sera consommé par ton analyseur, sans le traiter, lorsqu'il est avant le ";".
    Par contre il servira de séparateur indispensable dans d'autres endroits. C'est pour ça qu'il te faut absolument définir une grammaire. Soit tu utilises une API externe, soit tu fais tout manuellement. Tu "câbles" chaque règle de ta grammaire par une méthode, et tu utilises une pile pour lire le texte.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  10. #10
    Membre confirmé
    Inscrit en
    Février 2008
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 72
    Par défaut
    l espace veut dire nouvelle unité lexical , je veut dire par exemple l analyseur connait x > , chaque caractere tt seul mais ne connait pas x> donc il faut faire un parser de code , donc c un inconvénient de la classe scanner

    merci pour les réponses

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. un petit analyseur lexical
    Par rchod dans le forum Général Java
    Réponses: 0
    Dernier message: 16/11/2011, 18h35
  2. Analyseur lexical en Pascal
    Par acacia dans le forum Langage
    Réponses: 5
    Dernier message: 29/11/2007, 15h43
  3. probléme dans l'analyseur lexical
    Par the sun dans le forum C#
    Réponses: 9
    Dernier message: 29/05/2007, 11h00
  4. Faire un analyseur lexical
    Par sylsau dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 29/03/2007, 12h41
  5. Analyseur lexical a 3 automates
    Par mehdouch dans le forum C
    Réponses: 2
    Dernier message: 29/03/2006, 11h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo