Partage
  • Partager sur Facebook
  • Partager sur Twitter

Un problème de conflit en bison

priorité dans mon mini-compilateur en Bison

Sujet résolu
    7 décembre 2024 à 19:22:42

    Bonjour à tous,

    Je travaille sur un mini-compilateur en C et je rencontre un problème que je n'arrive pas à résoudre. J'espère que vous pourrez m'aider à le corriger ou me donner des pistes pour avancer.

    Voici un exemple de programme que je teste dans mon analyseur syntaxique :

    while (compteur) 
        if (eee || eee) {
            compteur = compteur + 1;
        } 
        else 
            if (eee || eee) {
                compteur = compteur + 1;
            }

    Dans mon fichier Bison, j'ai défini les règles suivantes (l'erreur semble se situer ici) :

    i_inc:
        IF '(' Exp ')' Instr {
            $$ = makeNode(ifse);
            addChild($$, $3);
            addSibling($3, $5);
        }
        | IF '(' Exp ')' i_compl ELSE i_inc {
            $$ = makeNode(ifse);
            addChild($$, $3);
            addSibling($3, $5);
            Node *nodeElse = makeNode(elsese);
            addChild(nodeElse, $7);
            addSibling($3, nodeElse);
        }
    ;

    Mon problème :

    Lorsque je teste ce code, mon programme utilise toujours la première règle (IF '(' Exp ')' Instr), même si la condition ELSE est présente dans le code source. Cela me fait penser que Bison réduit les règles trop tôt, avant d'avoir la possibilité d'empiler les tokens nécessaires pour la deuxième règle.

    Ce que je recherche :

    • Une explication ou une solution pour que mon analyseur syntaxique gère correctement les deux règles, en respectant la priorité du ELSE lorsqu'il est présent.
    • Une manière de modifier mon fichier Bison pour éviter que le programme réduise immédiatement avec la première règle.

    Merci d'avance pour votre aide ! Toute suggestion ou explication sera grandement appréciée.





    • Partager sur Facebook
    • Partager sur Twitter
      9 décembre 2024 à 19:28:00

      tu as testé en inversant l'ordre des règles?
      • Partager sur Facebook
      • Partager sur Twitter

      Un problème de conflit en bison

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      • Editeur
      • Markdown