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; }}
Analizar Lxico
Arbol de Anlisis Sintctico
x++
Programa
Instruccin
Variable
x
++
Analizar Lxico
Arboles de Anlisis Sintctico
Analizar Lxico
Cadena vlida -> rbol sintctico Si no hay rbol sintctico?
Error Lxico Conjunto de cadenas Que pueden generarse por rboles sintcticos
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; }}
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