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

Générateurs de compilateur Discussion :

Bison : boucle WHILE - WEND espacée de plusieurs lignes


Sujet :

Générateurs de compilateur

  1. #1
    Membre régulier
    Avatar de DjPoke
    Homme Profil pro
    Invalide temporaire
    Inscrit en
    Août 2005
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Invalide temporaire

    Informations forums :
    Inscription : Août 2005
    Messages : 93
    Points : 77
    Points
    77
    Billets dans le blog
    1
    Par défaut Bison : boucle WHILE - WEND espacée de plusieurs lignes
    Bonjour,

    J'ai une question à poser sur Bison, mais d'abord, je résume ma situation.
    Je développe un interpreteur BASIC à l'ancienne, et je me trouve dans le cas des commandes WHILE et WEND.

    Voici le cas qui me pose problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    10 WHILE (conditions) : action : action
    20 actions
    30 WEND
    Si j'envoie tout mon code source d'un coup à Flex/Bison, je me retrouve avec le devoir de gérer les numéros de lignes, je ne sais pas comment faire cela vu que j'emploi déjà les nombres pour les calculs.
    Si, par contre, j'envoie à Flex/bison les lignes de commande une à une manuellement, je peux retrouver où retourner par un système de stockage dans une pile.

    Ma question est la suivante :
    Existe t'il, au moment du parsing par Bison, un moyen d'obtenir un pointeur sur le WHILE en cours dans la ligne de commande entière ? Ou mieux encore, de connaitre l'offset de la commande WHILE par rapport au début de la ligne de commande ?

    A moins qu'il vous paraisse plus logique de parser le programme d'un coup ? Dans ce cas là, merci de me le préciser, et de me dire comment augmenter la taille du tampon Flex pour qu'il puisse contenir un programme de maximum 65535 lignes de char[256].

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Normalement, avec flex tu dois pouvoir faire deux tokens différents pour "nombre au début d'une ligne" et "nombre ailleurs".
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre régulier
    Avatar de DjPoke
    Homme Profil pro
    Invalide temporaire
    Inscrit en
    Août 2005
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Invalide temporaire

    Informations forums :
    Inscription : Août 2005
    Messages : 93
    Points : 77
    Points
    77
    Billets dans le blog
    1
    Par défaut
    Merci pour ta réponse. En effet, cela fonctionne pour les numéros de lignes, je viens de tester.
    Par contre, comment dire à Bison qu'il doit réinterpréter en boucle tout ce qui se trouve entre WHILE et WEND ?

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Je ne sais pas trop, je n'ai jamais fait un interpréteur avec. Généralement, je fais un compilo, donc je parse tout le programme en un arbre syntaxique.

    Mais je pense que tu peux passer par une pile (probablement sous forme d'une liste simplement chaînée) mémorisant où se trouve le dernier WHILE... et cela marchera même avec des while imbriqués (par contre, attention aux GOTO sortant de la boucle; il faut penser à dépiler le WHILE à ce moment-là aussi).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre régulier
    Avatar de DjPoke
    Homme Profil pro
    Invalide temporaire
    Inscrit en
    Août 2005
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Invalide temporaire

    Informations forums :
    Inscription : Août 2005
    Messages : 93
    Points : 77
    Points
    77
    Billets dans le blog
    1
    Par défaut
    N'y a t'il pas une variable genre YYquelquechose qui permet de savoir où en est le parser de son boulot ?
    C'est pour le stocker dans cette pile ?

  6. #6
    Membre régulier
    Avatar de DjPoke
    Homme Profil pro
    Invalide temporaire
    Inscrit en
    Août 2005
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Invalide temporaire

    Informations forums :
    Inscription : Août 2005
    Messages : 93
    Points : 77
    Points
    77
    Billets dans le blog
    1
    Par défaut
    En fait, si l'on m'expliquait comment implémenter la commande GOTO, cela m'aiderait beaucoup.

    Au passage, une autre question, comment différencier l'assignement d'une valeur à une variable d'une simple expression, s.v.p ? J'obtiens des décalages/réductions si je fais comme cela :
    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
     
     
    command: INSTRUCTION boolexpression
     | assignment
     ;
     
    assignment: INTEGERVAR EQUAL boolexpression; { assignvar($1,$3); } // INTEGERVAR est le nom d'une variable
     
    boolexpression: expression
     |boolexpression EQUAL expression
     ;
     
    expression: term
     | expression PLUS term
     | etc...
     ;
     
    term: INTEGER
     | INTEGERVAR { $$ = getvariablevalue(INTEGERVAR);
     }
    EDIT: Pour cette question subsidiaire, c'est résolu en agissant dans Flex.
    Par contre, pour le GOTO, il me faudrait pouvoir modifier l'éventuel pointeur qui, dans Flex, pointe sur la zone texte où il en est de son travail.
    Personne n'a une idée ?

    EDIT2: Je crois avoir trouvé, il faut que je teste. Si j'execute les lignes de code une à une, il me suffit, lorsque je rencontre GOTO, de faire un "return;" en ayant au préalable sauvé un flag et la ligne où sauter dans des variables globales.

    EDIT3: Cela fonctionne pour le GOTO. Le temps de m'assurer que le WHILE fonctionne et je marque ce sujet comme résolu.

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

Discussions similaires

  1. Problème boucle WHILE/WEnd avec plusieurs conditions
    Par Romanaxx dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 02/12/2013, 15h00
  2. chargement du Combo Par sql boucle While wend
    Par r.mehdi dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 09/06/2008, 18h16
  3. Boucle While .. Wend
    Par petibonohm dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 21/02/2008, 16h19
  4. [VBA]Boucle While/Wend interrompue
    Par stéphane_ais2 dans le forum VBA Access
    Réponses: 6
    Dernier message: 29/03/2007, 15h05
  5. Recordset et boucle While...Wend
    Par sbeprod dans le forum Access
    Réponses: 9
    Dernier message: 24/07/2006, 16h48

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