//DeclarationAST public object VisitConstDeclAST(ConstDeclAST v,object arg) { string tipo=(string)v.tipo.visit(this,(int)arg); v.adornotipo=tipo; if (tipo=="char"){ if(v.value.sym==sym.CHAR){ identificadores.enter(v.value.value,"",v); } else errores_contextuales+="Error Contextual: El valor de asignación no corresponde al tipo de la variable.\n"; } else if(tipo=="int"){ if(v.value.sym==sym.NUM){ identificadores.enter(v.value.value,"",v); } else errores_contextuales+="Error Contextual: El valor de asignación no corresponde al tipo de la variable.\n"; } else if(tipo=="float"){ if(v.value.sym==sym.NUM){ identificadores.enter(v.value.value,"",v); } else errores_contextuales+="Error Contextual: El valor de asignación no corresponde al tipo de la variable.\n"; } else{ errores_contextuales+="Error Contextual: El tipo de la declaración no es válido.\n"; } return null; }
//DeclarationAST public object VisitConstDeclAST(ConstDeclAST v,object arg) { string stringtipo=(string)v.tipo.visit(this,arg); Type tipo=this.tipo(stringtipo,arg); if (arg.GetType().Name.Equals("TypeBuilder")){ TypeBuilder act=(TypeBuilder)arg; variables.Add(act.DefineField(v.value.value,tipo,FieldAttributes.Literal)); } else { ILGenerator act=(ILGenerator)arg; variablesLocales.Add(act.DeclareLocal(tipo)); } return null; }
//---------------------------------------------------------------------------------------- //Declaration public object VisitConstDeclAST(ConstDeclAST v,object arg) { int numaux = ((int)arg); printtab(numaux); resultado = resultado +"\n"+(v.GetType()+" " + v.value); v.tipo.visit(this,numaux+1); return null; }