bonjour,
suis-je bien au bon endroit pour parler d'un problème qui me met dans l’embarras, dans le livre "compilateurs principes techniques et outils"?
bonjour,
suis-je bien au bon endroit pour parler d'un problème qui me met dans l’embarras, dans le livre "compilateurs principes techniques et outils"?
Peut-être, voire très probablement. Quel est ce problème ? De là, on pourra le dire plus précisément.
Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.
Créer des applications graphiques en Python avec PyQt5
Créer des applications avec Qt 5.
Pas de question d'ordre technique par MP !
c'est pour dire voilà:
dans le chapitre sur l'analyseur syntaxique descendant, dans la section de rattrapage d'erreur, l'entrée M[E,')'] est synchro et M[F,+] est aussi synchro. Pourtant, dans l'entrée erronée ")id*+id$", la parenthèse fermante est sautée tandis que quand on arrive à l'étoile, c'est le non-terminal F qui est dépilé.
quelqu'un pourrait-il m'éclairer su cette contradiction?
C'est donc bien le bon forum, mais la question est trop spécifique pour moi, je passe mon tour.
Pourrais-tu donner plus de contexte, histoire que des gens qui n'ont pas le livre sous la main puissent réfléchir un peu à ta question ?
Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.
Créer des applications graphiques en Python avec PyQt5
Créer des applications avec Qt 5.
Pas de question d'ordre technique par MP !
Pas sûr qu'on soit sur le bon forum, y a-t-il un forum voyance/boule de cristal ?
il y a tout un chapitre sur le sujet, je ne sais pas si je serais capable de tout résumer:
grammaire non contextuelle :
E -> T E'
E' -> + T E' | epsilon (epsilon est la production vide)
T -> F T'
T' -> * F T' | epsilon
F -> ( E ) | id
table d'analyse :
figure 4.22:
Il y a une pile. Au départ, elle a le dollar au fond et l'axiome( = E ) au dessus et au somment. En avançant dans le flux d'entrée, de deux chose l'une. Le sommet de la pile est un terminal(un symbole d'entré id,+,*,(,),$) si le flux d'entrée donne un terminal qui est au somment de la pile, le terminal est dépilé et on avance dans le flux d'entrée. Sinon, il y a erreur. Si par contre le sommet de la pile est un non-terminal, on le dépile et on empile les symboles (terminaux et non-terminaux) de la production se trouvant dans la table d'analyse à la ligne du non-terminal et la colonne du terminal, avec le symbole le plus à gauche de la production, au sommet de la pile. cet algo se termine quand on a plus que le dollar dans la pile.
pour le rattrapage sur erreur, l'idée est que si on rencontre une erreur, les symboles sont sautés jusqu'à avoir dans l'entrée un terminal élément d'un ensemble de synchronisation. Alors on saute le terminal et on dépile lorsque le terminal de synchronisation est rencontré dans l'entrée (c'est ce que j'ai compris).
je cite le livre:
Cette table s'utilise de la façon suivante. Si l'annalyseur syntaxique cheche l'entré M[A,a] (M est le tableau, A un non-terminal et "a" un symbole) et constate qu'elle est vide, alors le symbole d'entrée a est sauté.Si l'entrée est "synchro", alors le non-terminal au sommet de la pile est dépilé afin d'essayer de contiinuer l'analyse syntaxique. Si une unité lexicale au sommet de la pile ne correspond pas au symbole d'entrée,alors on déplie l'unité lexicale, comme indiqué précédement.
Sur l'entrée erronnée )id*+id, l'analyseur et le mécanisme de ratrapâge d'erreur de la figure 4.22 se comporte comme indiqué à la figure 4.23
figure 4.23:
mon problème est que M[E,')'] est une entrée sychro E et n'est pas dépilé. Ils ont mis sychro à M[E,')'] car ')' est dans l'ensemble des symboles suivant E. Peut-être qu'il ne faudrais pas mettre '(' dans l'ensemble de synchronisation, malgré qu'il soit dans l'ensemble des suivants de E?
qu'en pensez-vous?
Partager