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 :

Split expression régulière


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2015
    Messages : 136
    Par défaut Split expression régulière
    salut tous le monde
    je suis entrain de programmer un analyseur lexical sous java
    pour un texte donné il me donne les mots clé les séparateur identificateur ect,par exemple public static void main ;
    public static void main sont des mot clé
    ; séparateur
    le soucis c'est au niveau du split
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tabmot=chaine.split(" ");
    il prend pas en compte les mot collé par exemple String[ ], <=,
    il me faut une expression régulière qui traite tous les cas , j'ai mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tabmot=chaine.split("\\[| ");
    le "[" du "String[ ]" est perdu !!!!

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Hello,

    les expressions régulières ne peuvent pas servir pour l'analyse lexicale.
    Il faut soit le programmer entièrement toi-même, soit utiliser une bibliothèque d'analyse lexicale/grammaticale, comme JavaCC.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2015
    Messages : 136
    Par défaut
    je suis obligé de la programmer moi même je veux juste savoir comment sa marche pour pouvoir continuer tous seul
    par exemple pour String[], je dois trouvé
    String
    [
    ]

  4. #4
    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
    Tu dois analyser ta chaine caractère par caractère jusqu'à trouver un mot contenu dans ton dictionnaire.
    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.

  5. #5
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2012
    Messages
    3 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 3 020
    Par défaut
    Citation Envoyé par dinobogan Voir le message
    Tu dois analyser ta chaine caractère par caractère jusqu'à trouver un mot contenu dans ton dictionnaire.
    Et donc, si, par hasard, dans ton dictionnaire tu as "int" et "integer", tu fais comment pour différencier les deux?

    Mais la question n'est pas évidente. J'imagine qu'il faut essayer de déterminer toutes les possibilités, notament les tableaux avec les [], les fonctions avec les (), etc...

    Donc trouver quels sont les séparateurs (l'espace ou le saut de ligne souvent), quels sont les préfixes ou les suffixes qui existent, et les tester.

  6. #6
    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
    Citation Envoyé par Carhiboux Voir le message
    Et donc, si, par hasard, dans ton dictionnaire tu as "int" et "integer", tu fais comment pour différencier les deux?
    Ca c'est le niveaux 2 de l'analyse lexicale. Je ne voulais pas embrouiller le demandeur car sa demande est très vague. Mais puisque le soucis est soulevé, autant y répondre maintenant
    Voici une solution possible : lorsqu'un mot est trouvé, il faut vérifier si le dictionnaire contient un mot plus grand dont le préfixe vient d'être trouvé. Si non, alors le mot est trouvé, si oui alors vérifier un caractère supplémentaire du texte pour tenter d'y trouver un mot plus grand. Si aucun mot plus grand ne correspond, alors revenir en arrière sur le texte et prendre le mot initial.
    Mais la question n'est pas évidente. J'imagine qu'il faut essayer de déterminer toutes les possibilités, notament les tableaux avec les [], les fonctions avec les (), etc...
    Attention, il parle d'analyse lexicale, pas syntaxique. Lors de l'analyse lexicale, il n'y a pas de notion de tableau, fonction...
    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.

  7. #7
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2015
    Messages : 136
    Par défaut
    Citation Envoyé par dinobogan Voir le message
    Tu dois analyser ta chaine caractère par caractère jusqu'à trouver un mot contenu dans ton dictionnaire.
    Salut dinobogan
    j'ai decouper mon fichier txt avec un split("\\s") , et j'ai mis tous les mot decouper dans un tableau tabmot
    j'ai implémenter 4 liste (mot clef identificateur séparateur opérateur)
    j'ai mis tous mes liste dans une Map
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    for(String mot : tabmot ) {
    		     Optional<ListePosition> position = ListePosition.chercher(listes, mot);
    		     if ( position.isPresent() ) {
    			position.ifPresent(e-> System.out.printf("%s[%d]\n", e.getNomListe(), e.getIndexDansLaListe()+1)); 
    		     }
    		     else {
    			System.out.println(mot+ " : mot introuvable " );
    		     }}
    comment faire pour decouper les mot collé par exemple String[]
    je dois avoir String mot clé , [ separateur , ] separateur !!!!

  8. #8
    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
    Une analyse lexicale doit se faire caractère par caractère. Utiliser des expressions régulières est bien trop compliqué.
    Tu peux par exemple faire une analyse lexicale en plusieurs passe. La première passe va faire la séparation entre les identificateurs (au sens large) et les non-identificateurs.
    Un identificateur est une suite de caractères telle que ça commence par [a-zA-Z_] et continue par des lettres ou des chiffres. Lorsqu'un caractère autre que ça est trouvé, alors un identificateur est trouvé et mis de côté.
    Un "non-identificateur", c'est tout le reste. A ce niveau, tu pourrais tomber sur le problème d'un non-identificateur avec deux symboles comme l'incrémentation unaire en Java par exemple. Tu peux choisir de dire que ce genre de symbole est une suite de deux symboles distincts et c'est l'analyse grammaticale qui va s'en charger.
    La seconde passe va s'occuper de faire la différence entre les identificateurs : variable, mot-clé... Tu peux même dans cette passe faire des règles de collage pour les symboles successifs comme l'incrémentation unaire (si tu ne veux pas le faire dans l'analyse grammaticale).
    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.

Discussions similaires

  1. Expression régulière pour "éclater" (split) une chaîne
    Par SergioMaster dans le forum Langage
    Réponses: 26
    Dernier message: 01/10/2015, 19h59
  2. Réponses: 1
    Dernier message: 05/08/2015, 08h59
  3. Réponses: 4
    Dernier message: 26/05/2014, 14h52
  4. Split et expression régulière
    Par MaitrePylos dans le forum Langage
    Réponses: 2
    Dernier message: 12/10/2007, 13h47
  5. Réponses: 5
    Dernier message: 11/06/2002, 15h21

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