traductor dds en cup

Post on 13-Jan-2016

61 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

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

Expresiones lógicas

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:

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);:}

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);

:}

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));

:}

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));

:};

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

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

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));

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));

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));

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

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));

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

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));

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));

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));

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));

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

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

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));

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));

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));

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));

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));

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));

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));

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));

top related