Donc j'étudie pour un test que j'ai à venir sur les automates pushdown et les langages sans contexte et je suis coincé sur cette construction.Pousser/popping pile dans l'ordre inverse dans un Pushdown Automaton
J'ai chaque partie de cet automate fonctionnant parfaitement à l'exception d'une partie que j'expliquerai ci-dessous. Le langage à reconnaître est: {x # y # z # w | x, y, z, w dans {0, 1} + avec x ≠ w et y ≠ z}. Donc le problème que j'ai est de comparer Xi à Wi, puisque les éléments de Wi ne sont pas connus au moment où l'automate arrive à traiter W, la façon dont je l'ai conçu. Si je stocke le contenu de X, quand le temps viendra de sauter et de comparer chaque élément à ceux de W, ils apparaîtront dans l'ordre inverse et considéreront donc 000111 et 111000 comme étant la même chaîne et le PDA rejettera , quand il devrait clairement accepter (ce sont des chaînes différentes). Ceci n'est qu'un exemple, cela entraînera également l'analyse incorrecte d'autres entrées.
S'il y a un moyen de pousser le contenu de X sur la pile dans l'ordre inverse, ils apparaîtront dans leur forme originale, me permettant de comparer correctement le contenu des chaînes.
S'il y a un moyen d'inverser le contenu de la pile après avoir poussé normalement, cela me permettra également d'arriver à la solution.
Toute aide serait grandement appréciée. Merci.
Je ne suis pas tout à fait sûr de votre notation. Est-ce que 'x #' est égal à * des répétitions arbitraires d'un caractère * 'x'? – dhke
@dhke c'est juste le caractère '#' dans la chaîne.Un exemple de chaîne dans la langue serait "01 # 01 # 10 # 10" ou "0 # 00 # 000 # 0000". Aussi pour clarifier si pas évident, Si x n'est pas égal à y alors cela signifie x> y, x
JayB