1 / 39

Traductor EDT en ANTLR

Traductor EDT en ANTLR. Expresiones aritméticas. Gramática en ANTLR. /* Axioma */ axioma: a; a: l_e =e SEMICOLON { System.out.println (&quot;<br> nReconocida expresion aritmetica . Valor final: &quot; + $l_e.res ); } a | ; /* Reglas expresiones aritméticas */ e returns [ int res=0]:

aderyn
Télécharger la présentation

Traductor EDT en ANTLR

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Traductor EDT en ANTLR Expresiones aritméticas

  2. Gramática en ANTLR /* Axioma */ axioma: a; a: l_e=e SEMICOLON { System.out.println("\n\nReconocidaexpresionaritmetica. Valor final: " + $l_e.res ); } a | ; /* Reglas expresiones aritméticas */ e returns [int res=0]: l_t=t l_e1=e1[$l_t.res] {$res = $l_e1.res;} ; e1 [int val] returns [int res=0]: OPSUMA l_t=t l_e1=e1[$val + $l_t.res] {$res = $l_e1.res;} | OPRESTA l_t=t l_e1=e1[$val - $l_t.res] {$res = $l_e1.res;} | {$res = $val;} ; t returns [int res=0]: l_f=f l_tl=t1[$l_f.res] {$res = $l_tl.res;} ;

  3. Gramática en ANTLR t returns [int res=0]: l_f=f l_tl=t1[$l_f.res] {$res = $l_tl.res;} ; t1 [int val] returns [int res=0]: OPMULT l_f=f l_tl=t1[$val * $l_f.res] {$res = $l_tl.res;} | OPDIV l_f=f l_tl=t1[$val / $l_f.res] {$res = $l_tl.res;} | {$res = $val;} ; f returns [int res=0]: '(' l_e=e ')' {$res = $l_e.res;} | l_n=NUMERO {$res = Integer.parseInt($l_n.text);} ; NUMERO : '0'..'9'+ ; OPSUMA : '+'; OPRESTA : '-'; OPMULT : '*'; OPDIV : '/'; SEMICOLON: ';' '\r'? '\n'?;

  4. Proceso de traducción • En la animación siguiente se muestra el proceso de traducción que sigue la expresión aritmética: (1+5*5); • En cada fotograma se muestra la parte del árbol sintáctico correspondiente a un determinado estado del traductor. • En rojo aparece la producción que se está analizando y en verde las acciones semánticas relacionadas.

  5. Proceso de traducción • Árbol sintáctico completo, generado por la expresión: (1+5*5);

  6. Proceso de traducción • Primera producción  “a”, reconoce la(s) expresión(es) que terminan en “;”. • Cadena involucrada en la producción  (1+5*5);

  7. Proceso de traducción • Siguiente producción  “e”, analiza y procesa la expresión completa • Cadena involucrada en la producción  (1+5*5);

  8. Proceso de traducción • Siguiente producción  “t”, analiza y procesa elementos terminales, expresiones dentro de paréntesis, y expresiones con productos y divisiones. • Cadena involucrada en la producción  (1+5*5);

  9. Proceso de traducción • Siguiente producción  “f”, analiza y procesa elementos terminales y expresiones dentro de paréntesis. • Cadena involucrada en la producción  (1+5*5);

  10. Proceso de traducción • Siguiente producción  “e”, analiza y procesa la expresión completa. • Cadena involucrada en la producción  (1+5*5);

  11. Proceso de traducción • Siguiente producción  “t”, analiza y procesa elementos terminales, expresiones dentro de paréntesis, y expresiones con productos y divisiones. • Cadena involucrada en la producción  (1+5*5);

  12. Proceso de traducción • Siguiente producción  “f”, analiza y procesa elementos terminales y expresiones dentro de paréntesis. • Cadena involucrada en la producción  (1+5*5);

  13. Proceso de traducción • Elemento terminal  “1”, se actualiza el atributo res de “f” con el valor numérico correspondiente al terminal leído. • Cadena involucrada en la producción  (1+5*5); f.res=1 1

  14. Proceso de traducción • Siguiente producción  “t1”, recibe como parámetro un valor que utilizará como operando de un producto o división. • Cadena involucrada en la producción  (1+5*5); t1.val=f.res 1

  15. Proceso de traducción • Elemento terminal  “λ”, cómo la producción es vacía, el atributo res se actualiza con el valor del parámetro de “t1”. • Cadena involucrada en la producción  (1+5*5); t1.res=t1.val 1

  16. Proceso de traducción • “t1” actualiza el valor del atributo res de “t” con el valor de la expresión calculada. • Cadena involucrada en la producción  (1+5*5); t.res=t1.res 1

  17. Proceso de traducción • Siguiente producción  “e1”, recibe como parámetro un valor que utilizará como operando de una suma o resta. • Cadena involucrada en la producción  (1+5*5); e1.val=t.res 1

  18. Proceso de traducción • Siguiente producción  “t”, analiza y procesa elementos terminales, expresiones dentro de paréntesis, y expresiones con productos y divisiones. • Cadena involucrada en la producción  (1+5*5);

  19. Proceso de traducción • Siguiente producción  “f”, analiza y procesa elementos terminales y expresiones dentro de paréntesis. • Cadena involucrada en la producción  (1+5*5);

  20. Proceso de traducción • Elemento terminal  “5”, se actualiza el atributo res de “f” con el valor numérico correspondiente al terminal leído. • Cadena involucrada en la producción  (1+5*5); f.res=5 5

  21. Proceso de traducción • Siguiente producción  “t1”, recibe como parámetro un valor que utilizará como operando de un producto o división. • Cadena involucrada en la producción  (1+5*5); t1.val=f.res 5

  22. Proceso de traducción • Siguiente producción  “f”, analiza y procesa elementos terminales y expresiones dentro de paréntesis. • Cadena involucrada en la producción  (1+5*5);

  23. Proceso de traducción • Elemento terminal  “5”, se actualiza el atributo res de “f” con el valor numérico correspondiente al terminal leído. • Cadena involucrada en la producción  (1+5*5); f.res=5 5

  24. Proceso de traducción • Siguiente producción  “t1^”, recibe como parámetro un valor que utilizará como operando de un producto o división. En este caso se le pasa como operando el resultado del producto entre el valor devuelto por “f” y el atributo que usa como parámetro “t1” (el padre). • Cadena involucrada en la producción  (1+5*5); 5 t1^.val= t1.val * f.res ^ 5

  25. Proceso de traducción • Elemento terminal  “λ”, cómo la producción es vacía, el atributo res se actualiza con el valor del parámetro de “t1”. • Cadena involucrada en la producción  (1+5*5); t1.res=t1.val 25

  26. Proceso de traducción • “t1^” actualiza el valor del atributo res de “t1” con el valor de la expresión calculada. • Cadena involucrada en la producción  (1+5*5); 25 t1.res=t1^.res ^

  27. Proceso de traducción • “t1” actualiza el valor del atributo res de “t” con el valor de la expresión calculada. • Cadena involucrada en la producción  (1+5*5); t.res=t1.res 25

  28. Proceso de traducción • Siguiente producción  “e1^”, recibe como parámetro un valor que utilizará como operando de una suma o resta. En este caso se le pasa como operando el resultado del producto entre el valor devuelto por “t” y el atributo que usa como parámetro “e1” (el padre). • Cadena involucrada en la producción  (1+5*5); 1 e1^.val= e1.val + t.res ^ 25

  29. Proceso de traducción • Elemento terminal  “λ”, cómo la producción es vacía, el atributo res se actualiza con el valor del parámetro de “e1”. • Cadena involucrada en la producción  (1+5*5); e1.res=e1.val 26

  30. Proceso de traducción • “e1^” actualiza el valor del atributo res de “e1” con el valor de la expresión calculada. • Cadena involucrada en la producción  (1+5*5); 26 e1.res=e1^.res ^

  31. Proceso de traducción • “e1” actualiza el valor del atributo res de “e” con el valor de la expresión calculada. • Cadena involucrada en la producción  (1+5*5); 26 e.res=e1.res

  32. Proceso de traducción • “e” actualiza el valor del atributo res de “f” con el valor de la expresión calculada. • Cadena involucrada en la producción  (1+5*5); f.res=e.res 26

  33. Proceso de traducción • Siguiente producción  “t1”, recibe como parámetro un valor que utilizará como operando de un producto o división. • Cadena involucrada en la producción  (1+5*5); t1.val=f.res 26

  34. Proceso de traducción • Elemento terminal  “λ”, cómo la producción es vacía, el atributo res se actualiza con el valor del parámetro de “t1”. • Cadena involucrada en la producción  (1+5*5); t1.res=t1.val 26

  35. Proceso de traducción • “t1” actualiza el valor del atributo res de “t” con el valor de la expresión calculada. • Cadena involucrada en la producción  (1+5*5); t.res=t1.res 26

  36. Proceso de traducción • Siguiente producción  “e1”, recibe como parámetro un valor que utilizará como operando de una suma o resta. • Cadena involucrada en la producción  (1+5*5); e1.val=t.res 26

  37. Proceso de traducción • Elemento terminal  “λ”, cómo la producción es vacía, el atributo res se actualiza con el valor del parámetro de “e1”. • Cadena involucrada en la producción  (1+5*5); e1.res=e1.val 26

  38. Proceso de traducción • “e1” actualiza el valor del atributo res de “e” con el valor de la expresión calculada. • Cadena involucrada en la producción  (1+5*5); 26 e.res=e1.res

  39. Proceso de traducción Resultado = e.res • Finalmente “a” recibe el valor de la expresión aritmética calculada en la producción “e” y se muestra por pantalla. • Cadena involucrada en la producción  (1+5*5); 26

More Related