private static void AnalizarMetodos(ParseTreeNode root) { //METODO.Rule = id + TIPODATO + LISTAPARAMETROS + SENTENCIAS // | rmain + TIPODATO + LISTAPARAMETROS + SENTENCIAS; string nombre = root.ChildNodes[0].Token.ValueString; string tipo = ObtenerTipoDato(root.ChildNodes[1]); SingletonListas s = SingletonListas.GetInstance(); Ambito a = new Ambito() { Id = nombre, Nombre = nombre, Tipo = tipo }; s.Ambitos.Add(a); List <Variable> pars = DeclaracionParametros(root.ChildNodes[2], nombre); s.AlmacenarParametros(pars, nombre); s.AlmacenarVariable(pars, nombre); AnalizarSentencias(root.ChildNodes[3], tipo, nombre); }
private static void DeclaracionVariable(ParseTreeNode root, string H_AMBITO) { //DECLARA.Rule = id + TIPODATO + VALOR // | LISTA_IDS + TIPODATO + VALOR // | id + TIPODATO + E + VALOR; SingletonListas s = SingletonListas.GetInstance(); if (root.ChildNodes.Count == 3) { List <Variable> vars; string tipoDato = ObtenerTipoDato(root.ChildNodes[1]); string tipoDatoValor = tipoDato; object valor = ValorDefecto(tipoDato); if (root.ChildNodes[2].ChildNodes.Count > 0) { tipoDatoValor = ObtenerTipoDatoValor(root.ChildNodes[2], H_AMBITO); } if (tipoDatoValor.Equals("")) { return; } if (root.ChildNodes[0].Token == null) { vars = ObtenerListaId(root.ChildNodes[0], H_AMBITO); foreach (Variable v in vars) { v.Tipo = tipoDato; v.Valor = valor; } } else { vars = new List <Variable>(); Variable v = new Variable() { Id = root.ChildNodes[0].Token.ValueString, Tipo = tipoDato, Fila = root.ChildNodes[0].Token.Location.Line, Columna = root.ChildNodes[0].Token.Location.Column, Valor = valor, Indice = 0, Ambito = H_AMBITO }; if (!s.VerificarId(v, H_AMBITO)) { s.NuevoError(H_AMBITO, v.Id, v.Fila, v.Columna, $"Ya se encuentra declarada la variable {v.Id}"); } else { vars.Add(v); } } if (vars.Count != 0) { int fila = vars[vars.Count - 1].Fila; int columna = vars[vars.Count - 1].Columna; string id = vars[vars.Count - 1].Id; if (tipoDato.Equals(tipoDatoValor)) { s.AlmacenarVariable(vars, H_AMBITO); } else { s.NuevoError(H_AMBITO, id, fila, columna, "Tipo de datos no coinciden"); } } } else { } }