Documentos de Académico
Documentos de Profesional
Documentos de Cultura
de métodos
computacionales
Primer período
Entendiendo
a los lenguajes de programación…
Análisis sintáctico e
integración de
conocimientos
ANALISIS SINTESIS
Análisis de Análisis de Generación Generación
Programa Análisis Optimización Programa
Léxico sintaxis de código de código
fuente semántico de código objeto
(Scanner) (Parser) intermedio objeto
Lista de tokens Árbol sintáctico Árbol sintáctico Código intermedio Código optimizado
validado
EJEMPLO
void exp1();
void exp()
{ if (t == '0') //reconoce cte.
{ t = getch(); cout<<t;
exp1(); }
else
if (t == '(') //reconoce (
{ t = getch(); cout<<t;
exp();
if (t == ')') //reconoce )
{ t = getch(); cout<<t;
EXP1 -> e }
void exp1()
{ if (t == '+') //reconoce operador
{ t = getch(); cout<<t;
exp();
exp1(); }
}
main()
{ t = getch(); cout<<t;
exp();
PARSER if (t == 13)
cout << "Entrada aceptada"<<endl;
else
cout << "Expresion mal construida"<<endl;
}
EJERCICIOS
METALENGUAJES
Algoritmo de
Thompson
Conversión de una M1 M2
expresión regular
en un AFN
M 1*
Conversión de un AFN en AFD
• Generar una nueva tabla de transiciones, agrupando los estados a los que
se transiciona con cada símbolo, y uniendo estados de transiciones
épsilon.
• Cada grupo de estados que se forme, representa un nuevo estado del
autómata convertido, y deberá incorporarse a la tabla.
• Renombrar los grupos de estados formados, que pasan a ser los estados
del AFD equivalente.
• Los grupos de estados que contengan a un estado aceptor del AFN,
pasan a ser estados aceptores del nuevo AFD.
Ejemplo
Tabla de transiciones con estados agrupados
AFN Estado a b
A {q0} - B {q1, q2}
B {q1, q2} C {q0, q3} -
C {q0, q3} - D{q0, q1, q2}
D{q0, q1, q2} C {q0, q3} B {q1, q2}
AFD
b a b
A B C D
a
b
Recordando… Jerarquía de Chomsky
Relación con herramientas para describir los lenguajes
Recursivamente
enumerables Máquinas de Turing
ENTRADA
• Autómata finito que utiliza una pila
(stack) como memoria para recordar
información y tomar decisiones en el
proceso que se modela.
• Las transiciones del autómata se
realizan con el dato de entrada y con
el dato que hay en el tope de la pila,
tomando acción sobre la misma.
• Permiten representar lenguajes
libres de contexto en donde hay
control o balanceo de elementos.
Descripción de los lenguajes de la
jerarquía de Chomsky con Gramáticas formales
Gramática: S S
S → abc | aSBc → abc → aSBc
cB → Bc → aaSBcBc
bB → bb → aaabcBcBc
S
→ aaabBccBc
→ aSBc
→ aaabbccBc
→ aabcBc
→ aaabbcBcc
→ aabBcc
→ aaabbBccc
Conclusión: → aabbcc
La gramática reconoce el lenguaje
→ aaabbbccc
anbncn para n>0
Máquinas de Turing
¿Qué es computable?
¿Qué has aprendido en estas primeras 5 semanas del curso?