Introducing 

Prezi AI.

Your new presentation assistant.

Refine, enhance, and tailor your content, source relevant images, and edit visuals quicker than ever before.

Loading…
Transcript

CONDICIONAL SIMPLE Y COMPUESTA

William Roberto Cruz Villatoro

Emerson Fransuani Cuyuch Aguilar

Ashley Sarahi López Alvarado

Hernán Adriel Martínez Mazariegos

Bryan Alexander Calderon Villatoro

Hugo Walter Godinez Martin

4490-17-679

4490-17-4001

4490-17-16584

4490-17-7386

4490-17-1609

4490-17-15435

Generación de Código de Tercetos en Sentencias de Control

Generación de Código

Utilizando código de tercetos se genera el código correspondiente a las expresiones y las sentencias de control.

Expresiones

Expresiones

En el caso de las expresiones eran basadas en variables temporales para generar código. Ahora el problema son los cambios de flujo.

IF - THEN - ELSE

CASE

WHILE

REPEAT

Ejemplo

Ejemplo:

Entrada

IF A > 0 THEN

S1 := 1;

ELSE

S2 :=2;

FIN SI;

Salida

if A > 0 goto etq1

goto etq2

label etq1

S1 = 1

goto etq3

label etq2

S2 = 2

label etq3

sent

cond

S2 := 2;

A > 0

S1 := 1;

sent : IF cond THEN sent ELSE sent {Generar código de tercetos}

| ID ASIG expr {Generar código de tercetos}

código generado sent 1 => S1 = 1

código generado sent 2 => S2 = 2

S1 = 1

goto etq3

label etq2

S2 = 2

cond : expr '>' expr {Genero código de tercetos}

printf("if%s > %s goto etq_verdad", $1, $3);

printf("goto etq_falso");

Reglas Intermedias

Reglas Intermedias

Aquí es donde se generan las líneas que no están asociadas ni a la condición ni a las expresiones.

Ejemplo

Ejemplo:

sent : IF cond THEN sent ELSE sent {Generar código de tercetos}

1 2 3 4 5 6

if A > 0 goto etq1

goto etq2

label etq1

S1 = 1

goto etq3

label etq2

S2 = 2

label etq3

3 {printf("label etq_verdad");}

Condición Simple

Se refiere a aquella que no debe combinarse con otras condiciones para determinar un resultado.

Condición Simple

Ejemplo

Ejemplo:

if A > 0 goto etq 1

goto etq2

cond : expr '>' expr {strcpy($$.etq_verdad, nueva-etq());

strcpy($$.etq_falso, nueva-etq());

printf("if%s > %s goto %s, $1,$3,$$.etq_verdad");

printf("goto %s", $$.etq_falso);}

sent : IF cond THEN sent ELSE sent FIN IF

IF A + 3 > 0 THEN

tmp 1 = A + 3

if tmp1 > 0 goto etq-1

goto etq-2

Condicion Compuesta

Condición Compuesta

Se refiere a aquella que está compuesta de dos o más condiciones simples unidas mediante un operador lógico.

Ejemplo

Ejemplo:

Sea:

IF (A > 0) AND (B > C) THEN

S1 := 1;

FIN SI;

Se traduce a:

if A > 0 goto etq4

goto etq5

label etq4

if B > C goto etq6

goto etq7

label etq5

goto etq7

label etq6

S = 1

goto etq8

label etq7

label etq8

cond : cond AND cond {}

etq_V = etq_V2

etq_F = etq_F2

$1 $2 $3

cond : cond AND {printf("label %s", $1.etq_V);}

$4

cond {print("label %s", $1.etq_F);

print("goto %s", $4.etq_F);

strcpy($$.etq_V, $4.etq_V);

strcpy($$.etq_F, $4.etq_F);}

cond : cond OR cond

etq_V = etq_V2

etq_F = etq_F2

$1 $2 $3

cond : cond AND {printf("label %s", $1.etq_V);}

$4

cond {print("label %s", $1.etq_F);

print("goto %s", $4.etq_F);

strcpy($$.etq_V, $4.etq_V);

strcpy($$.etq_F, $4.etq_F);}

cond : cond OR cond

cond : NOT cond

NOT A > 3

cond : NOT cond {strcpy($$.etqV, $2.etqF);

srtcpy($$.etqF, $2.etqV);}

0 0 => V

0 1 => V

1 0 => V

1 1 => F

Sentencias que Permite el Lenguaje

Sentencias

Son condiciones y etiquetas asociadas que permiten la generación de código implicando condiciones como:

  • IF
  • WHILE
  • REPEAT

Sentencia

IF-THEN-ELSE

IF-THEN

-ELSE

Es el caso más simple, basta con idicar que etiqueta de verdad condición está asociada al código a continuación del THEN, y la etiqueta de falso se asocia al código que puede haber tras el ELSE.

Ejemplo

Ejemplo:

{printf(label $2.etqV);}

sent : IF cond THEN sent ELSE sent FIN IF {printf(label etqFINIF);}

{print(goto etqFINIF);

printf(laberl $2.etqF);}

sent : IF cond THEN sent ELSE sent FIN IF {printf("label %s",etqFINIF);}

{char etqFINIF[20];

strcpy(etqFINIF, nueva_etq());

printf("goto %s", etqFINIF);}

YACC

%{

char etqFINIF[20];

%}

...

%%

Si sent es un IF entonces utiliza la etqFINIF mal

sent : IF cond THEN sent ELSE sent FIN IF {utilizo etqFINIF}

{utilizo etqFINIF}

sent : IF cond THEN sent ELSE sent FIN IF {printf("labek %s", $1.etq);}

{strcpy($1.etq, nueva_etq());

printf("goto %s", $1.etq);}

  • Fransuani y Hernán: encargados de buscar información sobre la generación de código y creación de diapositiva.
  • Ashley: encargada de buscar información sobre condición simple y creación de diapositiva.
  • Bryan y Walter: encargados de buscar información sobre condición compuesta.
  • William: encargado de buscar información sobre las sentencias .
Learn more about creating dynamic, engaging presentations with Prezi