Diferencia entre revisiones de «Usuario:ManuelRomero/preferencias/analisisSintacticoSemático»

De WikiEducator
Saltar a: navegación, buscar
Línea 1: Línea 1:
 
{{:Usuario:ManuelRomero/compiladores/AS/nav}}
 
{{:Usuario:ManuelRomero/compiladores/AS/nav}}
 
<br>  
 
<br>  
 +
===OBJETIVO===
 +
*Esta parte realizará el análisis sintáctico de nuestro programa
 +
*Inevitablemente en muchas ocasiones realizaremos también análisis semántico
 +
*La forma de trabajar será interpretando diferentes producciones y en el momento adecuado validaremos la situación
 +
 
==PROGRAMA==
 
==PROGRAMA==
 
<br><br/>
 
<br><br/>

Revisión de 08:11 23 abr 2013



OBJETIVO

  • Esta parte realizará el análisis sintáctico de nuestro programa
  • Inevitablemente en muchas ocasiones realizaremos también análisis semántico
  • La forma de trabajar será interpretando diferentes producciones y en el momento adecuado validaremos la situación

PROGRAMA




Icon summary.gif

Resumen

La estructura general de cada producción va a ser:
Producción
Atributos
Acción
Código Yacc
 


  • primera producción
  • Producción obligatoria
  • define de qué consta un programa
programa : tPROGRAMA tIDENTIFICADOR ';' declaracion_variables declaracion_acciones bloque_instrucciones
  • Acciones a realizar
  1. Dar de alta el identificador del programa para no volver a usarlo
  2. Después de la última instrucción eliminamos items de la tabla de símbolos
  3. Para crear el XML del programa, cada vez que hay un identificador creo un tag diciendo lo que es y lo cierro al final de su ámbito
programa:
    tPROGRAMA tIDENTIFICADOR ';'
    {
      nivel = 0;
      inicializar_tabla (tabsim);
      /*El identificador del programa
      Es el primer símbolo y por lo tanto seguro
      que no va a exixtir, por lo que no lo buscamos*/
      introducir_programa(tabsim,$2.NId,0);
      AbreTag(xmlin,$2.NId,nivel-1);
    }
 
    declaracion_variables 
    declaracion_acciones
    bloque_instrucciones
    {
      eliminar_variables (tabsim, nivel);
      eliminar_parametros_ocultos(tabsim,nivel+1);
      eliminar_acciones (tabsim, nivel);
      eliminar_programa(tabsim);
      CierraTag(xmlin,$2.NId,nivel-1);
    }
;