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

Algorithmes et structures de données Discussion :

Coloration syntaxique /flex ou table de hach


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 293
    Par défaut Coloration syntaxique /flex ou table de hach
    Bonjour,


    je cherche à faire la coloration syntaxique pour un programme écrit en algorithme, du style voir la pièce jointe


    Alors j'ai essayé de reconnaître les mots clé à l'aide d'un lexer (flex) mais j'ai un problème qui se pose lorsque je fais ***si le lexer reconnaît les *** comme n'étant pas un mot clé, mais le souci c'est que si est reconnu en tant que mot clé et donc il est colorié. C'est pour ça que j'arrive à me demander si c'est bien flex que je dois utiliser. Pourquoi ne pas utiliser une table de hachage avec mes mots clé, comparer en temps réel les mots à insérer et colorier si une occurence du mot est trouvé.

    Merci

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Peut être qu'il te manque la notion de séparateur pour isoler tes mots clé

    un mot clé est précédé d'un séparateur et suivi d'un séparateur
    la liste des séparateurs est :
    * debut de fichier
    * fin de fichier,
    * espace, tab
    * caractères ("')[]...
    * a compléter
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 293
    Par défaut
    Citation Envoyé par ram_0000 Voir le message
    Peut être qu'il te manque la notion de séparateur pour isoler tes mots clé

    un mot clé est précédé d'un séparateur et suivi d'un séparateur
    la liste des séparateurs est :
    * debut de fichier
    * fin de fichier,
    * espace, tab
    * caractères ("')[]...
    * a compléter
    Bonjour


    si je comprends bien j'ai besoin de dire que un {separateur}{mot_cle}{separateur} definit un mot clé. le problème est le suivant

    ma chaîne de caractère commence par

    donc là j'ai debut_fichier_{mot_cle}fin_fichier => mais comment représenter debut_fichier dans flex ? est-ce qu'il y a un caractère spécial pour ça ? ou bien dans lex je dois définir une variable qui au départ vaut 0 (début fichier) et l'incrémenter dès la première analyse pour qu sa valeur devienne différente de 0 ?

    merci

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Citation Envoyé par exhortae Voir le message
    mais comment représenter debut_fichier dans flex ? est-ce qu'il y a un caractère spécial pour ça ? ou bien dans lex je dois définir une variable qui au départ vaut 0 (début fichier) et l'incrémenter dès la première analyse pour qu sa valeur devienne différente de 0 ?
    La notion début de fichier n'existe pas, il faut donc la créer.

    Citation Envoyé par exhortae Voir le message
    une variable qui au départ vaut 0 (début fichier) et l'incrémenter dès la première analyse pour qu sa valeur devienne différente de 0 ?
    C'est comme cela que je ferai

    Au passage, n'oublie pas de définir les séparateurs "début de ligne" et "fin de ligne"
    Et même si tu définis les séparateurs "début de ligne" et "fin de ligne", tu n'as plus besoin de définir "début de fichier" car un début de fichier c'est aussi un début de ligne
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  5. #5
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 293
    Par défaut
    Citation Envoyé par ram_0000 Voir le message
    La notion début de fichier n'existe pas, il faut donc la créer.


    C'est comme cela que je ferai

    Au passage, n'oublie pas de définir les séparateurs "début de ligne" et "fin de ligne"
    Et même si tu définis les séparateurs "début de ligne" et "fin de ligne", tu n'as plus besoin de définir "début de fichier" car un début de fichier c'est aussi un début de ligne
    Ok, jusqu'ici je comprends,

    keyword si|sinon|alors

    mot_cle {separateur}{keyword}{separateur}

    donc si j'ai

    debut_lignesifin_ligne ça marche

    mais dans le cas suivant

    si si => le 2ème si n'est pas précéder d'un séparateur donc il ne répond pas à la règle {separateur}{keyword}{separateur} donc ça ne sera pas un mot cle

    je peux faire la règle suivante

    {mot_cle} |
    keyword {mot_cle} |
    {mot_cle}keyword |
    keyword{mot_cle}{keyword} {/* action mot cle */}

    mais là encore problème si j'ai si si sisi il va me faire si si si : mot clé et le dernier si : pas mot clé, et mon problème c'est pas vraiment de définir ce qui est un mot clé, c'est surtout de définir ce qui ne l'est pas et dans ce cas si si est un mot clé mais la suite sisi ne l'est pas

  6. #6
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    En fait je pense que ce n'est pas la bonne approche.

    On peut considérer que un fichier est une suite de tokens.
    Un token peut être entre autres un nom.
    un nom est constitué comme suit : _[a-z][A-Z]([0-9]_[a-z][A-Z])*
    Cela, c'est facile à faire sous flex, il te reste ensuite plus que à règler le cas des commentaires /* si alors sinon */ et des chaines constantes "si alors sinon"

    Une fois que tu as isolé ces noms parmi tes token, il suffit de voir si ce nom est un mot réservé (si, alors, sinon, ...) et de le colorier en conséquence.

    Donc en fait, tu utilises flex pour séparer ton flux d'entrée et ensuite une table de hach pour savoir si ce mot est un mot réservé.

    Attention toutefois avec une table de hash. Il est possible (bien que peu probable mais ce qui peut arriver, arrivera, c'est Murphy qui le dit) que tu tombes par hasard sur un mot qui à le même hash qu'un autre (collision de hash).
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

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

Discussions similaires

  1. [C#] Coloration syntaxique !
    Par UNi[FR] dans le forum Windows Forms
    Réponses: 8
    Dernier message: 08/04/2009, 09h37
  2. Coloration syntaxique
    Par iubito dans le forum Evolutions du club
    Réponses: 73
    Dernier message: 02/11/2005, 10h01
  3. [debutant] coloration syntaxique
    Par demostene dans le forum Eclipse Java
    Réponses: 7
    Dernier message: 30/06/2004, 15h16
  4. Coloration syntaxique
    Par _-Sky-_ dans le forum Composants
    Réponses: 4
    Dernier message: 03/01/2004, 21h58
  5. Coloration syntaxique ASM dans un RichEdit
    Par Crick dans le forum Composants VCL
    Réponses: 5
    Dernier message: 20/12/2002, 01h53

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