traductor dds en cup

28
Expresiones lógicas

Upload: sissy

Post on 13-Jan-2016

61 views

Category:

Documents


0 download

DESCRIPTION

Traductor DDS en CUP. Expresiones lógicas. Clase Simbolo. La clase Simbolo de java permite almacenar el valor asociado a una determinada producción. Para este traductor es suficiente con definirla de la siguiente manera:. public class Simbolo { boolean valor; - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Traductor DDS en CUP

Expresiones lógicas

Page 2: Traductor DDS en CUP

Clase Simbolo

public class Simbolo{

boolean valor;public Simbolo(boolean valor){

this.valor = valor;}

}

La clase Simbolo de java permite almacenar el valor asociado a una determinada producción.

Para este traductor es suficiente con definirla de la siguiente manera:

Page 3: Traductor DDS en CUP

Gramática en CUPterminal String semicolon, apertura_parentesis, cierre_parentesis,

opand, opor, opnand, opnor, opxor, opxnor, opnot, opigual, opdist, opmenor, opmayor, opmenori, opmayori,vtrue, vfalse, numero;

non terminal Simbolo A, L, J, C;start with A;

A ::= L:eval semicolon {:System.out.println("Valor final:" + eval.valor + "\n\n");

:} A| L:eval semicolon {:

System.out.println("Valor final:" + eval.valor + "\n\n");:};

L ::= L:e1 opand J:e2 {:RESULT = new Simbolo(e1.valor && e2.valor);

:}| L:e1 opor J:e2 {:

RESULT = new Simbolo(e1.valor || e2.valor);:}

Page 4: Traductor DDS en CUP

Gramática en CUP| L:e1 opnand J:e2 {:

RESULT = new Simbolo(!(e1.valor && e2.valor));:}| L:e1 opnor J:e2 {:

RESULT = new Simbolo(!(e1.valor || e2.valor));:}| L:e1 opxor J:e2 {:

RESULT = new Simbolo(e1.valor ^ e2.valor);:}| L:e1 opxnor J:e2 {:

RESULT = new Simbolo(!(e1.valor ^ e2.valor));:}| J:eval {:

RESULT = new Simbolo(eval.valor);:};

J ::= apertura_parentesis L:eval cierre_parentesis {:RESULT = new Simbolo(eval.valor);

:}

Page 5: Traductor DDS en CUP

Gramática en CUP| vtrue {:

RESULT = new Simbolo(true);:}| vfalse {:

RESULT = new Simbolo(false);:}| opnot apertura_parentesis L:eval cierre_parentesis {:

RESULT = new Simbolo(!eval.valor);:}| C:eval {:

RESULT = new Simbolo(eval.valor);:};

C ::= numero:n1 opigual numero:n2 {:RESULT = new Simbolo(Integer.parseInt(n1) ==

Integer.parseInt(n2));:}| numero:n1 opdist numero:n2 {:

RESULT = new Simbolo(Integer.parseInt(n1) != Integer.parseInt(n2));

:}

Page 6: Traductor DDS en CUP

Gramática en CUP| numero:n1 opmenor numero:n2 {:

RESULT = new Simbolo(Integer.parseInt(n1) < Integer.parseInt(n2));

:}| numero:n1 opmayor numero:n2 {:

RESULT = new Simbolo(Integer.parseInt(n1) > Integer.parseInt(n2));

:}| numero:n1 opmenori numero:n2 {:

RESULT = new Simbolo(Integer.parseInt(n1) <= Integer.parseInt(n2));

:}| numero:n1 opmayori numero:n2 {:

RESULT = new Simbolo(Integer.parseInt(n1) >= Integer.parseInt(n2));

:};

Page 7: Traductor DDS en CUP

En la animación siguiente se muestra el proceso de traducción que sigue la expresión lógica:(false and (74 >= 34));

En cada fotograma se muestra el árbol sintáctico en un determinado estado del traductor.

En rojo aparece la producción que se está analizando y en verde las acciones semánticas relacionadas.

Proceso de traducción

Page 8: Traductor DDS en CUP

Proceso de traducción

Primera producción “a”, reconoce la(s) expresión(es) que terminan en “;”.

Cadena involucrada en la producción (false and (74 >= 34));

a

Page 9: Traductor DDS en CUP

Proceso de traducción

a

l

;

Siguiente producción “l”, analiza y procesa la expresión completa

Cadena involucrada en la producción (false and (74 >= 34));

Page 10: Traductor DDS en CUP

Proceso de traducción

a

l

;

j

Siguiente producción “j”, analiza y procesa elementos terminales, expresiones dentro de paréntesis y comparaciones de números.

Cadena involucrada en la producción (false and (74 >= 34));

Page 11: Traductor DDS en CUP

Proceso de traducción

a

l

;

j l

)

(

Siguiente producción “l”, analiza y procesa la expresión completa

Cadena involucrada en la producción (false and (74 >= 34));

Page 12: Traductor DDS en CUP

Proceso de traducción

a

l

;

j l

)

(

Siguiente producción “l”, analiza y procesa la expresión completa

Cadena involucrada en la producción (false and (74 >= 34));

and

j

l

Page 13: Traductor DDS en CUP

Proceso de traducción

a

l

;

j l

)

(

and

j

l j

Siguiente producción “j”, analiza y procesa elementos terminales, expresiones dentro de paréntesis y comparaciones de números.

Cadena involucrada en la producción (false and (74 >= 34));

Page 14: Traductor DDS en CUP

Proceso de traducción

a

l

;

j l

)

(

and

j

l jfalse

Elemento terminal “false”, se devuelve un nuevo símbolo con el valor lógico del elemento terminal.

Cadena involucrada en la producción (false and (74 >= 34));

false

Page 15: Traductor DDS en CUP

Proceso de traducción

a

l

;

j l

)

(

and

j

l jfalse

false

“j” devuelve el correspondiente símbolo con el valor de la expresión calculada.

Cadena involucrada en la producción (false and (74 >= 34));

Page 16: Traductor DDS en CUP

Proceso de traducción

a

l

;

j l

)

(

and

j

l jfalse

Siguiente producción “j”, analiza y procesa elementos terminales, expresiones dentro de paréntesis y comparaciones de números.

Cadena involucrada en la producción (false and (74 >= 34));

Page 17: Traductor DDS en CUP

Proceso de traducción

a

l

;

j l

)

(

and

j

l jfalse

l

)

(

Siguiente producción “l”, analiza y procesa la expresión completa

Cadena involucrada en la producción (false and (74 >= 34));

Page 18: Traductor DDS en CUP

Proceso de traducción

a

l

;

j l

)

(

and

j

l jfalse

l

)

(

j

Siguiente producción “j”, analiza y procesa elementos terminales, expresiones dentro de paréntesis y comparaciones de números.

Cadena involucrada en la producción (false and (74 >= 34));

Page 19: Traductor DDS en CUP

Proceso de traducción

a

l

;

j l

)

(

and

j

l jfalse

l

)

(

j

Siguiente producción “c”, analiza y procesa comparaciones de números.

Cadena involucrada en la producción (false and (74 >= 34));

c

Page 20: Traductor DDS en CUP

Proceso de traducción

a

l

;

j l

)

(

and

j

l jfalse

l

)

(

j c >=

34

74

Elementos terminales “74 >= 34”, se devuelve un nuevo símbolo con el valor lógico del resultado de la operación lógica.

Cadena involucrada en la producción (false and (74 >= 34));

true

Page 21: Traductor DDS en CUP

Proceso de traducción

a

l

;

j l

)

(

and

j

l jfalse

l

)

(

j c >=

34

74

true

“c” devuelve el correspondiente símbolo con el valor de la expresión calculada.

Cadena involucrada en la producción (false and (74 >= 34));

Page 22: Traductor DDS en CUP

Proceso de traducción

a

l

;

j l

)

(

and

j

l jfalse

l

)

(

j c >=

34

74

true

“j” devuelve el correspondiente símbolo con el valor de la expresión calculada.

Cadena involucrada en la producción (false and (74 >= 34));

Page 23: Traductor DDS en CUP

Proceso de traducción

a

l

;

j l

)

(

and

j

l jfalse

l

)

(

j c >=

34

74

true

“l” devuelve el correspondiente símbolo con el valor de la expresión calculada.

Cadena involucrada en la producción (false and (74 >= 34));

Page 24: Traductor DDS en CUP

Proceso de traducción

a

l

;

j l

)

(

and

j

l jfalse

l

)

(

j c >=

34

74

false(false and true)

“j” devuelve el correspondiente símbolo con el valor de la expresión calculada (false and true).

Cadena involucrada en la producción (false and (74 >= 34));

Page 25: Traductor DDS en CUP

Proceso de traducción

a

l

;

j l

)

(

and

j

l jfalse

l

)

(

j c >=

34

74

false

“l” devuelve el correspondiente símbolo con el valor de la expresión calculada (false and true).

Cadena involucrada en la producción (false and (74 >= 34));

Page 26: Traductor DDS en CUP

Proceso de traducción

a

l

;

j l

)

(

and

j

l jfalse

l

)

(

j c >=

34

74

false

“j” devuelve el correspondiente símbolo con el valor de la expresión calculada (false and true).

Cadena involucrada en la producción (false and (74 >= 34));

Page 27: Traductor DDS en CUP

Proceso de traducción

a

l

;

j l

)

(

and

j

l jfalse

l

)

(

j c >=

34

74

false

“l” devuelve el correspondiente símbolo con el valor de la expresión calculada (false and true).

Cadena involucrada en la producción (false and (74 >= 34));

Page 28: Traductor DDS en CUP

Proceso de traducción

a

l

;

j l

)

(

and

j

l jfalse

l

)

(

j c >=

34

74

Resultado=false

Finalmente “a” recibe el valor de la expresión lógica calculada en la producción “l” y se muestra por pantalla.

Cadena involucrada en la producción (false and (74 >= 34));