Sentence enum_initializer(string enumName) { if (peek("{")) { EnvTypes savedEnvTypes = entornoTipos; entornoTipos = new EnvTypes(entornoTipos); EnvValues savedEnvValues = entornoValores; entornoValores = new EnvValues(null); match("{"); List<VariableDeclarator> varsDec = enum_initializer_list(savedEnvValues, savedEnvTypes); match("}"); EnumerationDeclaration enumDeclaration = new EnumerationDeclaration(enumName, varsDec, savedEnvValues); ValorEnumeracion valEnum = new ValorEnumeracion(); Enumeracion varEnum = new Enumeracion(entornoTipos); valEnum.valor = entornoValores; entornoTipos = savedEnvTypes; entornoTipos.put(enumName, varEnum); entornoValores = savedEnvValues; entornoValores.put(enumName, valEnum); return enumDeclaration; } else { Tipo varEnum = entornoTipos.get(enumName); Valor valEnum = entornoValores.get(enumName); string enumVarName = currentToken.Lexema; match(TokenType.ID); EnumerationVariableDeclaration enumVarDeclaration = new EnumerationVariableDeclaration(enumName, enumVarName, varEnum, valEnum); entornoTipos.put(enumVarName, varEnum); return enumVarDeclaration; } }
public override Valor clone() { ValorEnumeracion v_enum = new ValorEnumeracion(); v_enum.valor = valor; return v_enum; }