private static elementoVariable evaluarAsignacion(List <elementoToken> tokens) { elementoVariable variable = new elementoVariable(); string valorGuardado = ""; for (int i = 1; i < tokens.Count; i++) { if (Regex.IsMatch(tokens[i].getNombre(), "\"[^\"]*\"")) { valorGuardado = tokens[i].getNombre(); tokens[i].setNombre("\"" + 1 + "\""); } if (Regex.IsMatch(tokens[i].getNombre(), "\'[^\']\'")) { valorGuardado = tokens[i].getNombre(); tokens[i].setNombre("\'" + 1 + "\'"); } } for (int i = 0; i < tokens.Count; i++) { if (tokens[i].getNombre().Contains("\"") || tokens[i].getNombre().Contains("\'")) { tokens[i].setNombre(valorGuardado); } } variable = generarVariableAsignacion(tokens); return(variable); }
private static elementoVariable generarVariableAsignacion(List <elementoToken> tokens) { elementoVariable variable = new elementoVariable(); string auxiliarValor = ""; string auxiliarNombre = ""; int posicionAsignacion = 0; bool asignacionEspecial = false; bool operacionSimple = false; string fragmentoOperacion = ""; for (int i = 0; i < tokens.Count; i++) { if (tokens[i].getNombre().Equals("=")) { posicionAsignacion = i; } if (tokens[i].getNombre().Equals("+=") || tokens[i].getNombre().Equals("-=") || tokens[i].getNombre().Equals("*=") || tokens[i].getNombre().Equals("/=") || tokens[i].getNombre().Equals("%=")) { posicionAsignacion = i; asignacionEspecial = true; fragmentoOperacion = tokens[i].getNombre().Substring(0, 1); } if (tokens[i].getNombre().Equals("++") || tokens[i].getNombre().Equals("--")) { posicionAsignacion = i; operacionSimple = true; fragmentoOperacion = tokens[i].getNombre().Substring(0, 1); } if (posicionAsignacion != 0) { i = tokens.Count; } } if (asignacionEspecial == true) { for (int i = 0; i < posicionAsignacion; i++) { auxiliarNombre = auxiliarNombre + " " + tokens[i].getNombre(); } auxiliarValor = auxiliarNombre + " " + fragmentoOperacion; for (int i = posicionAsignacion + 1; i < tokens.Count - 1; i++) { auxiliarValor = auxiliarValor + " " + tokens[i].getNombre(); } } else if (operacionSimple == true) { for (int i = 0; i < posicionAsignacion; i++) { auxiliarNombre = auxiliarNombre + " " + tokens[i].getNombre(); } auxiliarValor = auxiliarNombre + " " + fragmentoOperacion + " 1"; } else { for (int i = 0; i < posicionAsignacion; i++) { auxiliarNombre = auxiliarNombre + " " + tokens[i].getNombre(); } for (int i = posicionAsignacion + 1; i < tokens.Count - 1; i++) { auxiliarValor = auxiliarValor + " " + tokens[i].getNombre(); } } variable = new elementoVariable("", auxiliarNombre.Replace(" ", ""), auxiliarValor, tokens[0].getLinea()); return(variable); }
private static elementoVariable generarVariableDeclaracion(List <elementoToken> tokens, int inicio, int final) { elementoVariable variable = new elementoVariable(); string tipoEsperado = tokens[0].getNombre(); List <string> ids = new List <string>(); int contadorCorchetes = 0; bool contieneAsignacion = false; int posicionAsignacion = 0; for (int i = inicio; i < final; i++) { if (tokens[i].getNombre().Equals("[")) { contadorCorchetes++; } if (tokens[i].getTipo().Equals("id")) { ids.Add(tokens[i].getNombre()); } if (tokens[i].getNombre().Equals("=")) { contieneAsignacion = true; posicionAsignacion = i; i = final; } } if (contadorCorchetes == 2) { if (contieneAsignacion == true) { string auxiliarValor = ""; for (int i = posicionAsignacion + 1; i < final; i++) { auxiliarValor = auxiliarValor + " " + tokens[i].getNombre(); } variable = new elementoVariable(tipoEsperado + "[][]", ids[0].Replace(" ", ""), auxiliarValor, tokens[0].getLinea()); } else { variable = new elementoVariable(tipoEsperado + "[][]", ids[0].Replace(" ", ""), "", tokens[0].getLinea()); } } else if (contadorCorchetes == 1) { if (contieneAsignacion == true) { string auxiliarValor = ""; for (int i = posicionAsignacion + 1; i < final; i++) { auxiliarValor = auxiliarValor + " " + tokens[i].getNombre(); } variable = new elementoVariable(tipoEsperado + "[]", ids[0].Replace(" ", ""), auxiliarValor, tokens[0].getLinea()); } else { variable = new elementoVariable(tipoEsperado + "[]", ids[0].Replace(" ", ""), "", tokens[0].getLinea()); } } else { if (contieneAsignacion == true) { string auxiliarValor = ""; for (int i = posicionAsignacion + 1; i < final; i++) { auxiliarValor = auxiliarValor + " " + tokens[i].getNombre(); } variable = new elementoVariable(tipoEsperado, ids[0].Replace(" ", ""), auxiliarValor, tokens[0].getLinea()); } else { variable = new elementoVariable(tipoEsperado, ids[0].Replace(" ", ""), "", tokens[0].getLinea()); } } return(variable); }