Usuario:ManuelRomero/preferencias/declaracionAccion

De WikiEducator
< Usuario:ManuelRomero
Revisión a fecha de 15:49 19 ago 2012; ManuelRomero (Discusión | contribuciones)

(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)
Saltar a: navegación, buscar

declaracion_acciones

Producción

DeclaracionAcciones.png

Atributos
Acción

Código Yacc

 declaracion_acciones:
|    declaracion_acciones  declaracion_accion
;

declaracion_accion

Producción

DeclaracionAccion.png

Atributos
Acción

Código Yacc

declaracion_accion:
     cabecera_accion ';'
     declaracion_variables
     declaracion_acciones     
     bloque_instrucciones{
       eliminar_variables (tabsim, nivel);
       eliminar_parametros_ocultos (tabsim, nivel+1);
       eliminar_acciones (tabsim, nivel);
       ocultar_parametros (tabsim, nivel);
       --nivel; 
       CierraTag(xmlin,$1,nivel);
     }
;

cabecera_accion

Producción

CabeceraAccion.png

Atributos
Acción
Esta producción es un poco complicada, analizamos:
  • En cuanto tengo el identificador de la acción la doy de alta (verificando que no existe el id) en la tabla de símbolos
    • De esta forma evitamos insertar parámetros con el mismo nombre que la acción
    • Al dar de alta el identificador, guardo la referencia de ese elemento de la tabla de simbolo
           $<id.PSimbolo>$= introducir_accion(tabsim,$2.NId,nivel,0);
  • Al tener los parámetros en el atributo de parametros_formales los asigno a la acción en la tabla de simbolos
             $<id.PSimbolo>3->parametros=$4;
Código Yacc
cabecera_accion:
     tACCION tIDENTIFICADOR{
     //Doy de alta la accion para evitar introducir parámetros con el nombre de la accion
       if (($2.PSimbolo == NULL) || ($2.PSimbolo->nivel !=nivel)){
 
           $<id.PSimbolo>$= introducir_accion(tabsim,$2.NId,nivel,0);
         /*MRM*/
       } 
       else{
           $<id.PSimbolo>$=NULL;
           char msg[100];
           sprintf(msg,"Identificador de accion <%s>, ya definido",$2.NId);
           error_semantico(msg);
           //Aunque ya este´definida, la incluyo  ???????
           CuentaErrores();
 
       }
       }   
 
       parametros_formales
     {/*Aqui es donde completare los datos de la acción*/
       /* incrementar el nivel*/
       /* Se refiere a esta parte del código por ser intermedio*/
       SIMBOLO  *accion;
       DEBUGA("cabecera_accion: tACCION tIDENTIFICADOR parametros_fromales",DACCION,debug);
    //   $<id.PSimbolo>$==NULL;
          if ($<id.PSimbolo>3!= NULL)
             $<id.PSimbolo>3->parametros=$4;
         DEBUGA("2",DACCION,debug);
         /*MRM ==> La instrucción anterior da vialación de código*/
       AbreTag(xmlin,$2.NId,nivel);
       nivel++; 
     }
;

==

cabecera_accion

Producción

CabeceraAccion.png

Atributos
Acción

Código Yacc