Está en la página 1de 12

Anlisis Lxico

Arboles de Anlisis Sintctico

Problema
Construya un programa While Que calcule la raz cuadrada De B y la ponga en x Se puede convertir en macro

Primer Intento
{ y := B; w := B; x := 0; While w <> 0 do { x++; v := x*x; w := y v }} Funciona bien si la raz es exacta (9, 16, etc.) Raz de 10?

Segundo Intento
{ y := B; w := B; x := 0; While w <> 0 do { x++; v := x*x; w := y v }; x--} Funciona bien si la raz NO es exacta (8, 12, etc.) Raz de 9?

Tercer Intento
{ y := B; w := B; x := 0; v := 0; While w <> 0 do { x++; v := x*x; w := y v }; w := v y; While w <> 0 do { x--; w := 0; }}

Funciona? Raz de 9? Raz de 5?

Analizar Lxico
Arbol de Anlisis Sintctico

x++

Programa
Instruccin

Variable
x

++

Analizar Lxico
Arboles de Anlisis Sintctico

Raz = smbolo inicial Cada hoja = componente lxico


O nil (cadena vaca)

Nodo intermedio = un no terminal Si A es nodo:


A -> X1 X2 X3...Xn es una produccin
X1 X2 X3...Xn son hijos de A

Analizar Lxico
Cadena vlida -> rbol sintctico Si no hay rbol sintctico?

Error Lxico Conjunto de cadenas Que pueden generarse por rboles sintcticos

Lenguaje generado por una gramtica


OJO: Hay gramticas ambiguas

Gramticas Ambiguas
prop -> id := expr | if expr then prop | if expr then prop else prop | while expr do prop | begin props_opc end props_opc -> lista_props | nil lista_props -> lista_props ; prop | prop

Volviendo al Problema...
{ y := B; w := B; x := 0; v := 0; While w <> 0 do { x++; v := x*x; w := y v }; w := v y; While w <> 0 do { x--; w := 0; }}

Hay que sustitur los macros Trabajo del preprocesador

Analizar Lxico
{ y := B; w := B; x := 0; v := 0; While w <> 0 do { x++; v := x*x; w := y v }; w := v y; While w <> 0 do { x--; w := 0; }}

Programa
{

Rutina

Analizar Lxico
{ While w <> 0 do x++; w++; } { While w <> 0 do x++ w++; }

Programa
{

Rutina