Usuario:ManuelRomero/preferencias/declaracionAccion
De WikiEducator
< Usuario:ManuelRomero
Revisión a fecha de 15:49 19 ago 2012; ManuelRomero (Discusión | contribuciones)
declaracion_acciones
- Producción
- Atributos
- Acción
Código Yacc
declaracion_acciones: | declaracion_acciones declaracion_accion ;
declaracion_accion
- Producción
- 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
- 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
- Atributos
- Acción
Código Yacc