SlideShare uses cookies to improve functionality and performance, and to provide you with relevant advertising. If you continue browsing the site, you agree to the use of cookies on this website. See our User Agreement and Privacy Policy.
SlideShare uses cookies to improve functionality and performance, and to provide you with relevant advertising. If you continue browsing the site, you agree to the use of cookies on this website. See our Privacy Policy and User Agreement for details.
Successfully reported this slideshow.
Activate your 14 day free trial to unlock unlimited reading.
Se presenta el análisis léxico en el contexto del análisis sintáctico y como el uso de expresiones regulares permite reducir el tamaño de los árboles de análisis sintáctico.
Interfaces de Usuarios, Interacción Humano-Computador y Lenguajes de Programación
Se presenta el análisis léxico en el contexto del análisis sintáctico y como el uso de expresiones regulares permite reducir el tamaño de los árboles de análisis sintáctico.
2.
Problema <ul><li>Construya un programa While </li></ul><ul><li>Que calcule la raíz cuadrada </li></ul><ul><li>De B y la ponga en x </li></ul><ul><li>Se puede convertir en macro </li></ul>
3.
Primer Intento <ul><li>{ y := B; </li></ul><ul><li>w := B; </li></ul><ul><li>x := 0; </li></ul><ul><li>While w <> 0 do { </li></ul><ul><li>x++; </li></ul><ul><li>v := x*x; </li></ul><ul><li>w := y – v </li></ul><ul><li>}} </li></ul><ul><li>Funciona bien si la raíz es exacta (9, 16, etc.) </li></ul><ul><li>¿Raíz de 10? </li></ul>
4.
Segundo Intento <ul><li>{ y := B; </li></ul><ul><li>w := B; </li></ul><ul><li>x := 0; </li></ul><ul><li>While w <> 0 do { </li></ul><ul><li>x++; </li></ul><ul><li>v := x*x; </li></ul><ul><li>w := y – v </li></ul><ul><li>}; </li></ul><ul><li>x--} </li></ul><ul><li>Funciona bien si la raíz NO es exacta (8, 12, etc.) </li></ul><ul><li>¿Raíz de 9? </li></ul>
5.
Tercer Intento <ul><li>{ y := B; w := B; </li></ul><ul><li>x := 0; v := 0; </li></ul><ul><li>While w <> 0 do { </li></ul><ul><li>x++; </li></ul><ul><li>v := x*x; </li></ul><ul><li>w := y – v </li></ul><ul><li>}; </li></ul><ul><li>w := v – y; </li></ul><ul><li>While w <> 0 do { </li></ul><ul><li>x--; </li></ul><ul><li>w := 0; </li></ul><ul><li>}} </li></ul><ul><li>¿Funciona? </li></ul><ul><li>¿Raíz de 9? ¿Raíz de 5? </li></ul>
6.
Analizar Léxico <ul><li>Arbol de Análisis Sintáctico </li></ul><ul><ul><li>x++ </li></ul></ul>Programa Instrucción Variable x ++
7.
Analizar Léxico <ul><li>Arboles de Análisis Sintáctico </li></ul><ul><ul><li>Raíz = símbolo inicial </li></ul></ul><ul><ul><li>Cada hoja = componente léxico </li></ul></ul><ul><ul><ul><li>O nil (cadena vacía) </li></ul></ul></ul><ul><ul><li>Nodo intermedio = un no terminal </li></ul></ul><ul><ul><li>Si A es nodo: </li></ul></ul><ul><ul><ul><li>A -> X1 X2 X3...Xn es una producción </li></ul></ul></ul><ul><ul><ul><li>X1 X2 X3...Xn son hijos de A </li></ul></ul></ul>
8.
Analizar Léxico <ul><li>Cadena válida -> árbol sintáctico </li></ul><ul><li>¿Si no hay árbol sintáctico? </li></ul><ul><ul><li>Error Léxico </li></ul></ul><ul><li>Lenguaje generado por una gramática </li></ul><ul><ul><li>Conjunto de cadenas </li></ul></ul><ul><ul><li>Que pueden generarse por árboles sintácticos </li></ul></ul><ul><li>OJO: Hay gramáticas ambiguas </li></ul>
9.
Gramáticas Ambiguas <ul><li>prop -> id := expr </li></ul><ul><li>| if expr then prop </li></ul><ul><li>| if expr then prop else prop </li></ul><ul><li>| while expr do prop </li></ul><ul><li>| begin props_opc end </li></ul><ul><li>props_opc -> lista_props | nil </li></ul><ul><li>lista_props -> lista_props ; prop | prop </li></ul>
10.
Volviendo al Problema... <ul><li>{ y := B; w := B; </li></ul><ul><li>x := 0; v := 0; </li></ul><ul><li>While w <> 0 do { </li></ul><ul><li>x++; </li></ul><ul><li>v := x*x; </li></ul><ul><li>w := y – v </li></ul><ul><li>}; </li></ul><ul><li>w := v – y; </li></ul><ul><li>While w <> 0 do { </li></ul><ul><li>x--; </li></ul><ul><li>w := 0; </li></ul><ul><li>}} </li></ul><ul><li>Hay que sustituír los macros </li></ul><ul><li>Trabajo del preprocesador </li></ul>
11.
Analizar Léxico <ul><li>{ y := B; w := B; </li></ul><ul><li>x := 0; v := 0; </li></ul><ul><li>While w <> 0 do { </li></ul><ul><li>x++; </li></ul><ul><li>v := x*x; </li></ul><ul><li>w := y – v </li></ul><ul><li>}; </li></ul><ul><li>w := v – y; </li></ul><ul><li>While w <> 0 do { </li></ul><ul><li>x--; </li></ul><ul><li>w := 0; </li></ul><ul><li>}} </li></ul>Programa { Rutina }
12.
Analizar Léxico <ul><li>{ While w <> 0 do x++; </li></ul><ul><li>w++; </li></ul><ul><li>} </li></ul><ul><li>{ While w <> 0 do x++ </li></ul><ul><li>w++; </li></ul><ul><li>} </li></ul>Programa { Rutina }
0 likes
Be the first to like this
Views
Total views
1,773
On SlideShare
0
From Embeds
0
Number of Embeds
62
You have now unlocked unlimited access to 20M+ documents!
Unlimited Reading
Learn faster and smarter from top experts
Unlimited Downloading
Download to take your learnings offline and on the go
You also get free access to Scribd!
Instant access to millions of ebooks, audiobooks, magazines, podcasts and more.
Read and listen offline with any device.
Free access to premium services like Tuneln, Mubi and more.