0% encontró este documento útil (0 votos)
5 vistas2 páginas

Simulación de Autómata de Pila en C++

Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como TXT, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
5 vistas2 páginas

Simulación de Autómata de Pila en C++

Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como TXT, PDF, TXT o lee en línea desde Scribd

#include <iostream>

#include <stack>
#include <string>

using namespace std;

// Función para simular el autómata de pila y mostrar los estados


bool automataDePila(const string& entrada) {
stack<char> pila;
char estado = 'i'; // Estado inicial
[Link]('#'); // Insertar el símbolo de fondo de pila
cout << "Estado actual: " << estado << endl;
estado = 'p';
cout << "Estado actual: " << estado << endl;
[Link]('S'); // Insertar el símbolo inicial S
estado = 'q';
cout << "Estado actual: " << estado << endl;

size_t i = 0; // Índice para recorrer la cadena de entrada


char cima;

while (![Link]()) {
cima = [Link]();
[Link]();

if (estado == 'q') {
switch (cima) {
case 'S':
if (i < [Link]() && entrada[i] == 'x') {
[Link]('S');
[Link]('y');
[Link]('x');
cout << "Transición: λ, S; xSy" << endl;
} else {
cout << "Transición: λ, S; λ" << endl;
}
break;
case 'x':
if (i < [Link]() && entrada[i] == 'x') {
cout << "Transición: x, x; λ" << endl;
i++;
} else {
return false; // Error si no coincide
}
break;
case 'y':
if (i < [Link]() && entrada[i] == 'y') {
cout << "Transición: y, y; λ" << endl;
i++;
} else {
return false; // Error si no coincide
}
break;
case '#':
estado = 'f';
cout << "Estado actual: " << estado << endl;
break;
default:
break;
}
}
}

// La cadena es aceptada si estamos en el estado final y hemos procesado toda


la entrada
return estado == 'f' && i == [Link]();
}

void mostrarMenu() {
cout << "----- Menú -----\n";
cout << "1. Ingresar una cadena\n";
cout << "2. Salir\n";
cout << "Elija una opción: ";
}

int main() {
int opcion;
string entrada;

do {
mostrarMenu();
cin >> opcion;

switch (opcion) {
case 1:
cout << "Ingrese la cadena de entrada: ";
cin >> entrada;

if (automataDePila(entrada)) {
cout << "La cadena es aceptada y ha llegado al estado de
aceptación.\n";
} else {
cout << "La cadena no es aceptada y no ha llegado al estado de
aceptación.\n";
}
break;

case 2:
cout << "Saliendo...\n";
break;

default:
cout << "Opción no válida. Por favor, elija una opción válida.\n";
break;
}
} while (opcion != 2);

return 0;
}

También podría gustarte