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

Langage Java Discussion :

Parsing 'intelligent' de chaine


Sujet :

Langage Java

  1. #1
    Membre actif

    Inscrit en
    Mai 2002
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mai 2002
    Messages : 328
    Points : 209
    Points
    209
    Par défaut Parsing 'intelligent' de chaine
    Bonjour,

    Je voudrais parser une chaine du type : 2 + "toto + " + "4+".

    Dans un premier temps, je me dis qu'il serait bien de séparer les tokens :
    2
    toto +
    4+

    Du coup, il faudra que je sois capable de splitter cette chaine, sans prendre en compte les "+" qui sont à l'intérieur des chaines...

    Une idée d'une classe Java qui pourrait m'aider ?

    Toine

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 545
    Points : 21 601
    Points
    21 601
    Par défaut
    Euh, je sais pas trop ce que tu te figures, mais il y a rien qui sépare ton 2 et ton toto, là.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre actif

    Inscrit en
    Mai 2002
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mai 2002
    Messages : 328
    Points : 209
    Points
    209
    Par défaut
    Il y a un "+"

  4. #4
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    ça ressemble vaguement à de l'interprétation de code... c'est quoi le besoin fonctionnel? y'a sûrement moyen de simplifier, parce que là.... aie aie aie...
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  5. #5
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 316
    Points
    8 316
    Billets dans le blog
    52
    Par défaut
    C'est de l'analyse syntaxique. En général, on voit cela en école pendant les cours liés à la définition d'un langage.

    Le parser le plus connue étant JFlex


    Celui-ci fait tout le travail une fois qu'on a définit le lexique du langage à parser cela à cette tête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    /* JFlex example: part of Java language lexer specification */
    import java_cup.runtime.*;
     
    /**
     * This class is a simple example lexer.
     */
    %%
     
    %class Lexer
    %unicode
    %cup
    %line
    %column
     
    %{
      StringBuffer string = new StringBuffer();
     
      private Symbol symbol(int type) {
        return new Symbol(type, yyline, yycolumn);
      }
      private Symbol symbol(int type, Object value) {
        return new Symbol(type, yyline, yycolumn, value);
      }
    %}
     
    LineTerminator = \r|\n|\r\n
    InputCharacter = [^\r\n]
    WhiteSpace     = {LineTerminator} | [ \t\f]
     
    /* comments */
    Comment = {TraditionalComment} | {EndOfLineComment} | {DocumentationComment}
     
    TraditionalComment   = "/*" [^*] ~"*/" | "/*" "*"+ "/"
    // Comment can be the last line of the file, without line terminator.
    EndOfLineComment     = "//" {InputCharacter}* {LineTerminator}?
    DocumentationComment = "/**" {CommentContent} "*"+ "/"
    CommentContent       = ( [^*] | \*+ [^/*] )*
     
    Identifier = [:jletter:] [:jletterdigit:]*
     
    DecIntegerLiteral = 0 | [1-9][0-9]*
     
    %state STRING
     
    %%
     
    /* keywords */
    <YYINITIAL> "abstract"           { return symbol(sym.ABSTRACT); }
    <YYINITIAL> "boolean"            { return symbol(sym.BOOLEAN); }
    <YYINITIAL> "break"              { return symbol(sym.BREAK); }
     
    <YYINITIAL> {
      /* identifiers */ 
      {Identifier}                   { return symbol(sym.IDENTIFIER); }
     
      /* literals */
      {DecIntegerLiteral}            { return symbol(sym.INTEGER_LITERAL); }
      \"                             { string.setLength(0); yybegin(STRING); }
     
      /* operators */
      "="                            { return symbol(sym.EQ); }
      "=="                           { return symbol(sym.EQEQ); }
      "+"                            { return symbol(sym.PLUS); }
     
      /* comments */
      {Comment}                      { /* ignore */ }
     
      /* whitespace */
      {WhiteSpace}                   { /* ignore */ }
    }
     
    <STRING> {
      \"                             { yybegin(YYINITIAL); 
                                       return symbol(sym.STRING_LITERAL, 
                                       string.toString()); }
      [^\n\r\"\\]+                   { string.append( yytext() ); }
      \\t                            { string.append('\t'); }
      \\n                            { string.append('\n'); }
     
      \\r                            { string.append('\r'); }
      \\\"                           { string.append('\"'); }
      \\                             { string.append('\\'); }
    }
     
    /* error fallback */
    [^]                              { throw new Error("Illegal character <"+
                                                        yytext()+">"); }
    Il en existe d'autre, mais ils ont tous le même principe !
    Personnellement, j'ai déjà utilisé CUP pour un projet d'école :
    http://sourceforge.net/projects/compli-a3/

    Mais, tu devrai nous préciser le but voulu pour pouvoir te conseillé sur l'utilisation d'un tel outil.

    Cordialement,
    Patrick Kolodziejczyk.

    Source :
    http://en.wikipedia.org/wiki/Lexical_analysis
    http://en.wikipedia.org/wiki/Compari...ser_generators
    http://jflex.de/
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

Discussions similaires

  1. [REGEXP] Problème de parsing d'une chaine
    Par Narvis dans le forum Langage
    Réponses: 4
    Dernier message: 25/06/2012, 15h13
  2. Réponses: 1
    Dernier message: 04/06/2012, 13h20
  3. Parsing d'une chaine de caracteres
    Par Premium dans le forum Langage
    Réponses: 1
    Dernier message: 21/01/2009, 09h37
  4. Parsing d'une chaine
    Par Premium dans le forum Langage
    Réponses: 2
    Dernier message: 22/12/2008, 12h50
  5. parse d'une chaine de caractère
    Par dereck1333 dans le forum C
    Réponses: 10
    Dernier message: 19/11/2007, 18h27

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