Your SlideShare is downloading. ×
0
Analisis Lexico
Analisis Lexico
Analisis Lexico
Analisis Lexico
Analisis Lexico
Analisis Lexico
Analisis Lexico
Analisis Lexico
Analisis Lexico
Analisis Lexico
Analisis Lexico
Analisis Lexico
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Analisis Lexico

1,536

Published on

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.

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.

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,536
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
44
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Análisis Léxico Arboles de Análisis Sintáctico Leonel Morales Díaz [email_address] Copyright 2008 by Leonel Morales Díaz – Ingeniería Simple. Derechos reservados Disponible en: http://www.ingenieriasimple.com/compiladores
  • 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 }

×