/// <summary> /// Checa si hay un signo y avanza hasta que sea un entero, se pueden acumular la cantidad que sean necesarias de signos. Si el total es impar, el siguiente valor se multiplica por -1 /// </summary> NodeLR CheckUnarySigns() { int indx = 0; ///Crea un index que nos indica cuántos signos negativos hay en el archivo ///Avanza sí el siguiente token es un símbolo while (tokenList[index].tokenType.Equals(TokenType.PLUS) || tokenList[index].tokenType.Equals(TokenType.MINUS)) { ///El token es igual a el símbolo de menos if (tokenList[index].tokenType.Equals(TokenType.MINUS)) { indx++; ///Aumenta el índex } Advance(); } VariablesFloat variables = new VariablesFloat(tokenList[index].lexeme, tokenList[index].tokenType); float Num = CheckID(); ///Crea un número que mande a llamar la función de CheckID Advance(); ///El index es diferente de cero y si el index tiene residuo diferente de cero, multiplica el valor por -1 if (indx != 0 && indx % 2 != 0) { Num *= -1; } variables.SetValue(Num); return(new NodeLR(variables)); }
/// <summary> /// Obtenemos todas las variables que se encuentran dentro de la sección de VARS /// </summary> void GetVars() { ///Se crea una lista de ids para que así se puedan crear nodos dependiendo del nombre y tipo List <string> ids = new List <string>(); ///Avanzamos hasta que dejen de haber variables en esta línea del texto while (tokenList[index].tokenType == TokenType.ID) { ids.Add(tokenList[index].lexeme); ///Se añaden a la lista de strings Advance(); //Avanza uno el index } ///Si el elemento actual dentro de la lista de tokens es igual a un entero, entra aquí if (tokenList[index].tokenType.Equals(TokenType.INTEGER)) { ///Por cada uno de los strings dentro de la lista de strings, avanza foreach (string id in ids) { ///Crea una variable de entero con el nombre de este string y con tipo entero VariablesInt vI = new VariablesInt(id, TokenType.INTEGER); ///Cre un nuevo nodo con esta variable NodeLR nodo = new NodeLR(vI); ///Añade este nodo a las variables globales VARIABLES.Add(vI); } } else if (tokenList[index].tokenType.Equals(TokenType.REAL)) { ///El elemento actual es un número real ///Por cada uno de los strings, avanza foreach (string id in ids) { ///Crea una variable flotante con este string VariablesFloat vI = new VariablesFloat(id, TokenType.REAL); ///Crea un nodo con esta variable NodeLR nodo = new NodeLR(vI); VARIABLES.Add(vI); ///Añade esta variable a las variables globales } } ids.Clear(); ///Libera la lista de strings Advance(); }
public void PogU(string varName, string type, string value) { bool contains = false; Dictionary <string, string> table = new Dictionary <string, string>(); if (Variables.ContainsKey(varName) || VariablesInt.ContainsKey(varName) || VariablesFloat.ContainsKey(varName)) { contains = true; } switch (type) { case "string": table = Variables; break; case "int": table = VariablesInt; break; case "float": table = VariablesFloat; break; default: p.ExceptionHandler(11, LineN, Line); break; } if (contains) { if (!table.ContainsKey(varName)) { p.ExceptionHandler(6, LineN, Line); } else { table[varName] = value; } } else { table.Add(varName, value); AllVars.Add(varName, table); } }
public void WeirdChamp(string varName, string type) { bool contains = false; Dictionary <string, string> table = new Dictionary <string, string>(); if (Variables.ContainsKey(varName) || VariablesInt.ContainsKey(varName) || VariablesFloat.ContainsKey(varName)) { contains = true; } switch (type) { case "string": table = Variables; break; case "int": table = VariablesInt; break; case "float": table = VariablesFloat; break; case "default": p.ExceptionHandler(11, LineN, Line); break; } if (contains) { if (!table.ContainsKey(varName)) { p.ExceptionHandler(6, LineN, Line); } else { try { table[varName] = Console.ReadLine(); } catch { p.ExceptionHandler(10, LineN, Line); } } } else { try { table.Add(varName, Console.ReadLine()); AllVars.Add(varName, table); } catch { p.ExceptionHandler(10, LineN, Line); } } }