Está en la página 1de 6

UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN

FACULTAD DE INGENIERÍA
ESCUELA PROFESIONAL DE INGENIERÍA EN INFORMÁTICA Y SISTEMAS

Practica N° 03

“Construyendo un DFA”

Curso : Compiladores y Teoria de Lenguajes

Ciclo de Estudios : 6to ciclo

Grupo de Laboratorio : Laboratorio B

Estudiando : Juan Pablo Apaza Atencio 2015-119015

TACNA – PERÚ
2018
PRÁCTICA N° 03: Construyendo tu DFA

I. CONTENIDO
 En la presente práctica se verificará el aprendizaje del alumno sobre DFA
(Deterministic Finite Automata).

II. MATERIALES Y EQUIPO


 Lenguaje de Programación c / c++
III. OBJETIVOS
 Verificar el entendimiento de la construcción de un DFA.
 Complementar la base teórica construyendo un programa para un autómata definido.

IV. FUNDAMENTO TEÓRICO

En clase se revisaron varios ejemplos para la construcción de un DFA y


básicamente se puede representar mediante una tabla cualquier DFA que se aprendió
mediante gráficos.

Por ejemplo, el siguiente DFA.


Se puede representar como una tabla

SÍMBOLOS
ESTAD 0 1
OS
a b a
b b c
c d a
d d d

Entonces como se ve, solo es una tabla donde según el símbolo (input) que es
leído y el estado actual se dirige a un determinado estado. Una vez leído toda la cadena
de entrada y verificando el estado actual, sólo existen dos posibilidades de salida:
aceptado o rechazado.

La idea de la práctica es poder codificar un programa que pueda realizar este


proceso, de la manera más creativa y generalizable.

Colocaremos un algoritmo de ayuda, pero es libre la forma de estructurar los


estados, símbolos y el algoritmo en sí.

Entrada: Cadena de caracteres (X), estados, transiciones, estado inicial (so),


estado aceptado (A). Salida: { Aceptado o Rechazado}.

s = so;
c = nextchar; // c es carácter leído uno por
uno de X. while ( c!=EOF) // EOF es fin del
archivo.
{ s = move(s,c); // De acuerdo a la transición donde
debe moverse. c = nextchar;
}

If (s ∈ A)
“ Aceptado”
Else
“ Rechazado”
V. ACTIVIDADES PROPUESTAS (DESARROLLO)

• Mostrar el DFA (gráfico) que va implementar, indicando el alfabeto, y el lenguaje


regular que desea capturar con ese DFA.

• Programar en C o C++ el ejercicio DFA elegido, guiándose del algoritmo mostrado o


puede ser otro algoritmo, siempre explicando en el informe su código.
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
using namespace std;
#define INICIO 0
#define S1 1
#define S2 2
#define S3 3
#define ERROR 4
int main(){
int estado = INICIO;
string cadena;
cout<<"Ingrese la cadena"<<endl;
cin>>cadena;
char *cadenaconver = strdup(cadena.c_str());
for(int i=0;i<cadena.length();i++){
switch(estado){
case INICIO:
if(cadenaconver[i]== 'h'){
estado = S1;
}else{
estado = ERROR;
}
break;

case S1:
}
break;
case ERROR:
cout<<"cadena no permitida"<<endl;
i =cadena.length() + 100;
break;
}
}
getch();
return 0;
}

También podría gustarte