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

Delphi Discussion :

Un Tokenizer Delphi


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 52
    Par défaut Un Tokenizer Delphi
    Bonjour à tous,

    Je poste ici car je ne trouve pas mon bonheur dans les FAQ Delphi et autre postes.

    Le titre parle de lui meme mais je vais quand meme vous l'expliciter:
    Je suis en stage... (jusque la, vous me dirai qu'il n'y a aucun rapport avec Delphi, mais...).
    Je doit faire un assistant/analyseur syntaxique en Delphi... pour un langage que la societe où je suis à creer.
    Donc, pour faire ca, il faut un Tokenizer, mais le probleme c'est que je n'en trouve pas...
    J'utilise deja le composant TSynEdit pour la coloration de ce langage maison.

    Je fais donc appel a vous et vous demande si vous n'avez pas un lien ou un projet semblable qui pourrait m'aider à avancer.

    Merci d'avance...

    ___________
    http://boubalou.miniville.fr

  2. #2
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 21
    Par défaut
    Hello,

    j'ai écrit dans un projet Delphi la classe StringTokenizer définit dans java.


    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
     
    unit UStringTokenizer;
     
     
    interface
    uses classes, Utype;
    type
        StringTokenizer = class
          protected
            liste : TList;     // liste des mots séparés.
            indexCourant : integer;
     
          public
            constructor create(st: string; car : char);
            function hasMoreTokens():boolean;
            function nextToken():string;
        end;
     
    implementation
     
    constructor StringTokenizer.create(st: string; car : char);
    var
      i,j: integer;
      mot :TTString;
      chaine : String;
    begin
       liste := TList.create;
       chaine := '';
       for i:= 1 to length(st) do
       begin
          if (st[i] = car) and (chaine <>'') then
          begin
              mot  := TTSTring.create;
              mot.value := chaine;
              liste.add(mot);
              chaine :='';
          end
          else
              chaine := chaine + st[i];
       end;
     
       // Le dernier mot
       if (chaine<> '') then
       begin
              mot  := TTSTring.create;
              mot.value := chaine;
              liste.add(mot);
              chaine :='';
       end;
     
       indexCourant := 0;
     
    end;
     
    function StringTokenizer.hasMoreTokens():boolean;
    begin
         result := (indexCourant < liste.count);
    end;
     
    function StringTokenizer.nextToken():string;
    begin
       Result := TTString(liste.Items[indexCourant]).value;
       inc(indexCourant);
    end;
     
    end.

  3. #3
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 21
    Par défaut petit rectificatif
    Désolé, j'ai oublié de fournir la classe TTString que j'ai écrite. Cette classe encapsulate un objet string. Elle n'est pas absolument necessaire mais cela évite de gérer une liste de pointeur sur string (attribut liste:TList qui n'accepte que des pointeurs).

    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
     
    type
        TTString = class(TObjt)
          public
                 value : string;
          public
                constructor create;
                function equals(obj : TObjt):boolean;override;
                function hashCode():integer;override;
                function toString():string;override;
          end;
     
    implementation
     
    constructor TTSTring.create;
    begin
        value := '';
    end;
     
    function TTString.equals(obj : TObjt):boolean;
    begin
        Result := ((obj<>nil) and (TTString(obj).value = value));
    end;
     
    function TTString.toString():string;
    begin
      Result := value;
    end;
     
    function TTString.hashCode():integer;
    var i: integer;
    begin
         Result := 0;
         for i:= 1 to length(value) do
         begin
            Result := Result + ord(value[i]);
         end;
    end;

  4. #4
    Expert confirmé

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Par défaut
    Un tutoriel sur le sujet : Les lexers par Olivier Lance.
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  5. #5
    Membre éprouvé
    Inscrit en
    Mars 2004
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 126
    Par défaut
    Avec Delphi tu as déjà TPaser dans l'unité Classes.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 52
    Par défaut
    Merci a vous tous pour vos reponses plus qu'utiles.

    --
    http://www.trop-fort.net/?news=75315

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

Discussions similaires

  1. Différences entre Delphi et Visual Basic ?
    Par Anonymous dans le forum Débats sur le développement - Le Best Of
    Réponses: 75
    Dernier message: 30/03/2009, 20h09
  2. Réponses: 1
    Dernier message: 13/05/2002, 09h19
  3. [Kylix] Migration delphi -> kylix
    Par Christian dans le forum EDI
    Réponses: 1
    Dernier message: 03/04/2002, 22h50
  4. Réponses: 4
    Dernier message: 27/03/2002, 11h03
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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