public WhereClause(string Campo, Type Tipo, Operadores Operador, string Valor, Condicional condicional) { this.campo = Campo; this.tipo = Tipo; this.operador = Operador; this.valor = Valor; this.condicional = condicional; }
private void btnRealizarCondicional_Click(object sender, EventArgs e)//modificar para condicional, será que manteremos o produto ou retiraremos já na condicional ? { if (listaprodutocondicional != null && listaprodutocondicional.Count > 0) { DALVenda venda = new DALVenda(); Condicional ven = new Condicional(); Cliente cli = new Cliente(); List <ItensCondicional> listiv = new List <ItensCondicional>(); ItensVenda iv = new ItensVenda(); DALPessoa dalpes = new DALPessoa(); cli = (dalpes.retornarCliente((int)cbClienteCond.SelectedValue)); ven.idCliente = cli.id;//(int)cbCliente.SelectedValue; // int testarProduto = 0; //ven.Valor = decimal.Parse(txtPreco.Text); ven.data = DateTime.Now; //ven.valorrestante = ven.Valor; //ven.idCategoriaPagamento = (int)cbTipoPagamento.SelectedValue; //ven.qtdParcelas = int.Parse(nudParcelamento.Text); //ven.valorrestante = 0; ven.status = "Pendente";//cbStatusCondicionalLista.SelectedValue.ToString(); foreach (ProdutoModel prod in listaprodutocondicional) { ItensCondicional iv2 = new ItensCondicional(); iv2.idProduto = prod.id; //ven.Valor = ven.Valor + prod.preco; //ven.valorrestante = ven.valorrestante + prod.preco; listiv.Add(iv2); } bool resultado = venda.RealizarCondicional(ven, listiv, cli); dgvListaCondicionais.DataSource = (new DALVenda().carregarCondicionais()).ToList(); dgvProdutosCondicional.DataSource = null; txtQtdCond.Text = ""; txtPrecoCond.Text = ""; if (resultado) { avisosCond.Text = "Condicional completado !"; } else { avisosCond.Text = "Condicional não completado !"; } } else { avisosCond.Text = "Selecine algum produto !"; } }
static void Main(string[] args) { System.IO.StreamReader input; String nombreArchivo; Dictionary <String, String> opciones = parseArgs(args); //Validar que no existan opciones incorrectas if (opciones.ContainsKey("--help") || opciones.Count == 0) { mostrarUso(); } else if (opcionInvalida(opciones)) { Console.WriteLine("Error: opción incorrecta"); mostrarUso(); } try { //Validar el archivo de entrada if (!opciones.ContainsKey("--entrada")) { Console.WriteLine("Error: falta archivo de entrada"); mostrarUso(); } nombreArchivo = opciones["--entrada"]; input = new System.IO.StreamReader(nombreArchivo); TinyLexer lexer = new TinyLexer(input); if (opciones.ContainsKey("--mostrar-tokens")) { Console.WriteLine("\n\n\n"); mostrarTokens(lexer, input); } lexer.setNombreArchivo(nombreArchivo); TinyParser parser = new TinyParser(lexer); Programa result = (Programa)(parser.parse().value); if (parser.getOmerrs() > 0) { System.Console.Error.WriteLine("La compilación ha terminado con " + parser.getOmerrs() + " errores"); WriteKeyPressForExit(); System.Environment.Exit(1); } if (opciones.ContainsKey("--mostrar-ast")) { Console.WriteLine("\n\n\n"); Console.WriteLine("\n####### Inicio del Árbol Sintáctico Abstracto #######"); result.dump(System.Console.Out, 0); Console.WriteLine("####### Fin del Árbol Sintáctico Abstracto #######\n"); } AnalizadorSemantico sem = new AnalizadorSemantico(result); sem.analizar(); if (SemantErrorReport.Instancia.tieneErrores()) { Console.Error.WriteLine("La compilación ha terminado con " + SemantErrorReport.Instancia.Errores + " errores"); WriteKeyPressForExit(); System.Environment.Exit(1); } else { if (opciones.ContainsKey("--mostrar-tipos")) { Console.WriteLine("\n\n\n"); Console.WriteLine("####### Inicio del Árbol Sintáctico Abstracto Anotado #######"); result.dump(System.Console.Out, 0); Console.WriteLine("####### Fin del Árbol Sintáctico Abstracto Anotado #######\n"); } Console.WriteLine("\n\n\n"); string path = Directory.GetCurrentDirectory(); Console.WriteLine("El directorio donde se ha generado el ejecutable es {0}", path); Sentencia s = result.Sentencias.getLista()[1]; Condicional c = (Condicional)s; GeneradorCodigo gen = new GeneradorCodigo(result, System.IO.Path.GetFileName(nombreArchivo), System.IO.Path.GetFileName(nombreArchivo) + ".exe"); if (opciones.ContainsKey("--generar-con-ast")) { gen.GenerarEjecutableconAst(false); } else if (opciones.ContainsKey("--generar-con-func")) { gen.GenerarEjecutableconFuncion(false); } else { gen.GenerarEjecutableconFuncion(false); } Console.WriteLine("La compilación ha finalizado correctamente"); } } catch (Exception e) { Console.Error.WriteLine(e.Message); Console.Error.WriteLine("!!! ERROR GRAVE: EL COMPILADOR NO GENERADO DE FORMA CORRECTA EL EJECUTABLE !!!"); throw new System.Exception("ERROR-0001: Un error inesperado no ha permitido llevar a cabo de forma correcta el proceso de compilacion"); } WriteKeyPressForExit(); }
/** Method with the actual generated action code. */ public TUVienna.CS_CUP.Runtime.Symbol CUP_TinyParser_do_action( int CUP_TinyParser_act_num, TUVienna.CS_CUP.Runtime.lr_parser CUP_TinyParser_parser, System.Collections.Stack xstack1, int CUP_TinyParser_top) { /* Symbol object for return from actions */ mStack CUP_TinyParser_stack = new mStack(xstack1); TUVienna.CS_CUP.Runtime.Symbol CUP_TinyParser_result; /* select the action based on the action number */ switch (CUP_TinyParser_act_num) { /*. . . . . . . . . . . . . . . . . . . .*/ case 30: // factor ::= error { Expresion RESULT = null; CUP_TinyParser_result = new TUVienna.CS_CUP.Runtime.Symbol(13 /*factor*/, RESULT); } return(CUP_TinyParser_result); /*. . . . . . . . . . . . . . . . . . . .*/ case 29: // factor ::= IDENTIFICADOR { Expresion RESULT = null; SimboloAbstracto id = (SimboloAbstracto)((TUVienna.CS_CUP.Runtime.Symbol)CUP_TinyParser_stack.elementAt(CUP_TinyParser_top - 0)).value; RESULT = new Variable(id, id.Linea, id.Columna); CUP_TinyParser_result = new TUVienna.CS_CUP.Runtime.Symbol(13 /*factor*/, RESULT); } return(CUP_TinyParser_result); /*. . . . . . . . . . . . . . . . . . . .*/ case 28: // factor ::= LIT_ENTERO { Expresion RESULT = null; SimboloAbstracto val = (SimboloAbstracto)((TUVienna.CS_CUP.Runtime.Symbol)CUP_TinyParser_stack.elementAt(CUP_TinyParser_top - 0)).value; RESULT = new NumeroEntero(val, val.Linea, val.Columna); CUP_TinyParser_result = new TUVienna.CS_CUP.Runtime.Symbol(13 /*factor*/, RESULT); } return(CUP_TinyParser_result); /*. . . . . . . . . . . . . . . . . . . .*/ case 27: // factor ::= PARENT_IZQ exp PARENT_DER { Expresion RESULT = null; Expresion e = (Expresion)((TUVienna.CS_CUP.Runtime.Symbol)CUP_TinyParser_stack.elementAt(CUP_TinyParser_top - 1)).value; RESULT = e; CUP_TinyParser_result = new TUVienna.CS_CUP.Runtime.Symbol(13 /*factor*/, RESULT); } return(CUP_TinyParser_result); /*. . . . . . . . . . . . . . . . . . . .*/ case 26: // term ::= factor { Expresion RESULT = null; Expresion e = (Expresion)((TUVienna.CS_CUP.Runtime.Symbol)CUP_TinyParser_stack.elementAt(CUP_TinyParser_top - 0)).value; RESULT = e; CUP_TinyParser_result = new TUVienna.CS_CUP.Runtime.Symbol(12 /*term*/, RESULT); } return(CUP_TinyParser_result); /*. . . . . . . . . . . . . . . . . . . .*/ case 25: // term ::= term DIVISION factor { Expresion RESULT = null; Expresion e1 = (Expresion)((TUVienna.CS_CUP.Runtime.Symbol)CUP_TinyParser_stack.elementAt(CUP_TinyParser_top - 2)).value; SimboloAbstracto d = (SimboloAbstracto)((TUVienna.CS_CUP.Runtime.Symbol)CUP_TinyParser_stack.elementAt(CUP_TinyParser_top - 1)).value; Expresion e2 = (Expresion)((TUVienna.CS_CUP.Runtime.Symbol)CUP_TinyParser_stack.elementAt(CUP_TinyParser_top - 0)).value; RESULT = new Division(e1, e2, d.Linea, d.Columna); CUP_TinyParser_result = new TUVienna.CS_CUP.Runtime.Symbol(12 /*term*/, RESULT); } return(CUP_TinyParser_result); /*. . . . . . . . . . . . . . . . . . . .*/ case 24: // term ::= term MULTIPLICACION factor { Expresion RESULT = null; Expresion e1 = (Expresion)((TUVienna.CS_CUP.Runtime.Symbol)CUP_TinyParser_stack.elementAt(CUP_TinyParser_top - 2)).value; SimboloAbstracto m = (SimboloAbstracto)((TUVienna.CS_CUP.Runtime.Symbol)CUP_TinyParser_stack.elementAt(CUP_TinyParser_top - 1)).value; Expresion e2 = (Expresion)((TUVienna.CS_CUP.Runtime.Symbol)CUP_TinyParser_stack.elementAt(CUP_TinyParser_top - 0)).value; RESULT = new Multiplicacion(e1, e2, m.Linea, m.Columna); CUP_TinyParser_result = new TUVienna.CS_CUP.Runtime.Symbol(12 /*term*/, RESULT); } return(CUP_TinyParser_result); /*. . . . . . . . . . . . . . . . . . . .*/ case 23: // exp_simple ::= term { Expresion RESULT = null; Expresion e = (Expresion)((TUVienna.CS_CUP.Runtime.Symbol)CUP_TinyParser_stack.elementAt(CUP_TinyParser_top - 0)).value; RESULT = e; CUP_TinyParser_result = new TUVienna.CS_CUP.Runtime.Symbol(11 /*exp_simple*/, RESULT); } return(CUP_TinyParser_result); /*. . . . . . . . . . . . . . . . . . . .*/ case 22: // exp_simple ::= exp_simple RESTA term { Expresion RESULT = null; Expresion e1 = (Expresion)((TUVienna.CS_CUP.Runtime.Symbol)CUP_TinyParser_stack.elementAt(CUP_TinyParser_top - 2)).value; SimboloAbstracto r = (SimboloAbstracto)((TUVienna.CS_CUP.Runtime.Symbol)CUP_TinyParser_stack.elementAt(CUP_TinyParser_top - 1)).value; Expresion e2 = (Expresion)((TUVienna.CS_CUP.Runtime.Symbol)CUP_TinyParser_stack.elementAt(CUP_TinyParser_top - 0)).value; RESULT = new Resta(e1, e2, r.Linea, r.Columna); CUP_TinyParser_result = new TUVienna.CS_CUP.Runtime.Symbol(11 /*exp_simple*/, RESULT); } return(CUP_TinyParser_result); /*. . . . . . . . . . . . . . . . . . . .*/ case 21: // exp_simple ::= exp_simple SUMA term { Expresion RESULT = null; Expresion e1 = (Expresion)((TUVienna.CS_CUP.Runtime.Symbol)CUP_TinyParser_stack.elementAt(CUP_TinyParser_top - 2)).value; SimboloAbstracto s = (SimboloAbstracto)((TUVienna.CS_CUP.Runtime.Symbol)CUP_TinyParser_stack.elementAt(CUP_TinyParser_top - 1)).value; Expresion e2 = (Expresion)((TUVienna.CS_CUP.Runtime.Symbol)CUP_TinyParser_stack.elementAt(CUP_TinyParser_top - 0)).value; RESULT = new Suma(e1, e2, s.Linea, s.Columna); CUP_TinyParser_result = new TUVienna.CS_CUP.Runtime.Symbol(11 /*exp_simple*/, RESULT); } return(CUP_TinyParser_result); /*. . . . . . . . . . . . . . . . . . . .*/ case 20: // exp ::= exp_simple { Expresion RESULT = null; Expresion e = (Expresion)((TUVienna.CS_CUP.Runtime.Symbol)CUP_TinyParser_stack.elementAt(CUP_TinyParser_top - 0)).value; RESULT = e; CUP_TinyParser_result = new TUVienna.CS_CUP.Runtime.Symbol(10 /*exp*/, RESULT); } return(CUP_TinyParser_result); /*. . . . . . . . . . . . . . . . . . . .*/ case 19: // exp ::= exp_simple IGUAL exp_simple { Expresion RESULT = null; Expresion e1 = (Expresion)((TUVienna.CS_CUP.Runtime.Symbol)CUP_TinyParser_stack.elementAt(CUP_TinyParser_top - 2)).value; SimboloAbstracto i = (SimboloAbstracto)((TUVienna.CS_CUP.Runtime.Symbol)CUP_TinyParser_stack.elementAt(CUP_TinyParser_top - 1)).value; Expresion e2 = (Expresion)((TUVienna.CS_CUP.Runtime.Symbol)CUP_TinyParser_stack.elementAt(CUP_TinyParser_top - 0)).value; RESULT = new Igual(e1, e2, i.Linea, i.Columna); CUP_TinyParser_result = new TUVienna.CS_CUP.Runtime.Symbol(10 /*exp*/, RESULT); } return(CUP_TinyParser_result); /*. . . . . . . . . . . . . . . . . . . .*/ case 18: // exp ::= exp_simple MENOR exp_simple { Expresion RESULT = null; Expresion e1 = (Expresion)((TUVienna.CS_CUP.Runtime.Symbol)CUP_TinyParser_stack.elementAt(CUP_TinyParser_top - 2)).value; SimboloAbstracto m = (SimboloAbstracto)((TUVienna.CS_CUP.Runtime.Symbol)CUP_TinyParser_stack.elementAt(CUP_TinyParser_top - 1)).value; Expresion e2 = (Expresion)((TUVienna.CS_CUP.Runtime.Symbol)CUP_TinyParser_stack.elementAt(CUP_TinyParser_top - 0)).value; RESULT = new Menor(e1, e2, m.Linea, m.Columna); CUP_TinyParser_result = new TUVienna.CS_CUP.Runtime.Symbol(10 /*exp*/, RESULT); } return(CUP_TinyParser_result); /*. . . . . . . . . . . . . . . . . . . .*/ case 17: // args ::= args COMA exp { ListaParametros RESULT = null; ListaParametros p = (ListaParametros)((TUVienna.CS_CUP.Runtime.Symbol)CUP_TinyParser_stack.elementAt(CUP_TinyParser_top - 2)).value; Expresion e = (Expresion)((TUVienna.CS_CUP.Runtime.Symbol)CUP_TinyParser_stack.elementAt(CUP_TinyParser_top - 0)).value; p.agregarElemento(e); RESULT = p; CUP_TinyParser_result = new TUVienna.CS_CUP.Runtime.Symbol(9 /*args*/, RESULT); } return(CUP_TinyParser_result); /*. . . . . . . . . . . . . . . . . . . .*/ case 16: // args ::= exp { ListaParametros RESULT = null; Expresion e = (Expresion)((TUVienna.CS_CUP.Runtime.Symbol)CUP_TinyParser_stack.elementAt(CUP_TinyParser_top - 0)).value; RESULT = new ListaParametros(); RESULT.agregarElemento(e); CUP_TinyParser_result = new TUVienna.CS_CUP.Runtime.Symbol(9 /*args*/, RESULT); } return(CUP_TinyParser_result); /*. . . . . . . . . . . . . . . . . . . .*/ case 15: // opt_args ::= { ListaParametros RESULT = null; RESULT = new ListaParametros(); CUP_TinyParser_result = new TUVienna.CS_CUP.Runtime.Symbol(8 /*opt_args*/, RESULT); } return(CUP_TinyParser_result); /*. . . . . . . . . . . . . . . . . . . .*/ case 14: // opt_args ::= args { ListaParametros RESULT = null; ListaParametros p = (ListaParametros)((TUVienna.CS_CUP.Runtime.Symbol)CUP_TinyParser_stack.elementAt(CUP_TinyParser_top - 0)).value; RESULT = p; CUP_TinyParser_result = new TUVienna.CS_CUP.Runtime.Symbol(8 /*opt_args*/, RESULT); } return(CUP_TinyParser_result); /*. . . . . . . . . . . . . . . . . . . .*/ case 13: // fuction_call ::= IDENTIFICADOR opt_args { Sentencia RESULT = null; SimboloAbstracto id = (SimboloAbstracto)((TUVienna.CS_CUP.Runtime.Symbol)CUP_TinyParser_stack.elementAt(CUP_TinyParser_top - 1)).value; ListaParametros p = (ListaParametros)((TUVienna.CS_CUP.Runtime.Symbol)CUP_TinyParser_stack.elementAt(CUP_TinyParser_top - 0)).value; RESULT = new LLamadaFuncion(id, p, id.Linea, id.Columna); CUP_TinyParser_result = new TUVienna.CS_CUP.Runtime.Symbol(7 /*fuction_call*/, RESULT); } return(CUP_TinyParser_result); /*. . . . . . . . . . . . . . . . . . . .*/ case 12: // sent_assign ::= IDENTIFICADOR ASIGNACION exp { Sentencia RESULT = null; SimboloAbstracto id = (SimboloAbstracto)((TUVienna.CS_CUP.Runtime.Symbol)CUP_TinyParser_stack.elementAt(CUP_TinyParser_top - 2)).value; SimboloAbstracto a = (SimboloAbstracto)((TUVienna.CS_CUP.Runtime.Symbol)CUP_TinyParser_stack.elementAt(CUP_TinyParser_top - 1)).value; Expresion e = (Expresion)((TUVienna.CS_CUP.Runtime.Symbol)CUP_TinyParser_stack.elementAt(CUP_TinyParser_top - 0)).value; RESULT = new Asignacion(new Variable(id, id.Linea, id.Columna), e, a.Linea, a.Columna); CUP_TinyParser_result = new TUVienna.CS_CUP.Runtime.Symbol(6 /*sent_assign*/, RESULT); } return(CUP_TinyParser_result); /*. . . . . . . . . . . . . . . . . . . .*/ case 11: // sent_repeat ::= REPITA secuencia_sent HASTA exp { Sentencia RESULT = null; SimboloAbstracto r = (SimboloAbstracto)((TUVienna.CS_CUP.Runtime.Symbol)CUP_TinyParser_stack.elementAt(CUP_TinyParser_top - 3)).value; ListaSentencia s = (ListaSentencia)((TUVienna.CS_CUP.Runtime.Symbol)CUP_TinyParser_stack.elementAt(CUP_TinyParser_top - 2)).value; Expresion c = (Expresion)((TUVienna.CS_CUP.Runtime.Symbol)CUP_TinyParser_stack.elementAt(CUP_TinyParser_top - 0)).value; RESULT = new RepitaHasta(c, s, r.Linea, r.Columna); CUP_TinyParser_result = new TUVienna.CS_CUP.Runtime.Symbol(5 /*sent_repeat*/, RESULT); } return(CUP_TinyParser_result); /*. . . . . . . . . . . . . . . . . . . .*/ case 10: // sent_if ::= SI exp ENTONCES secuencia_sent SINO secuencia_sent FIN { Sentencia RESULT = null; SimboloAbstracto s = (SimboloAbstracto)((TUVienna.CS_CUP.Runtime.Symbol)CUP_TinyParser_stack.elementAt(CUP_TinyParser_top - 6)).value; Expresion c = (Expresion)((TUVienna.CS_CUP.Runtime.Symbol)CUP_TinyParser_stack.elementAt(CUP_TinyParser_top - 5)).value; ListaSentencia en = (ListaSentencia)((TUVienna.CS_CUP.Runtime.Symbol)CUP_TinyParser_stack.elementAt(CUP_TinyParser_top - 3)).value; ListaSentencia sn = (ListaSentencia)((TUVienna.CS_CUP.Runtime.Symbol)CUP_TinyParser_stack.elementAt(CUP_TinyParser_top - 1)).value; RESULT = new Condicional(c, en, sn, s.Linea, s.Columna); CUP_TinyParser_result = new TUVienna.CS_CUP.Runtime.Symbol(4 /*sent_if*/, RESULT); } return(CUP_TinyParser_result); /*. . . . . . . . . . . . . . . . . . . .*/ case 9: // sent_if ::= SI exp ENTONCES secuencia_sent FIN { Sentencia RESULT = null; SimboloAbstracto s = (SimboloAbstracto)((TUVienna.CS_CUP.Runtime.Symbol)CUP_TinyParser_stack.elementAt(CUP_TinyParser_top - 4)).value; Expresion c = (Expresion)((TUVienna.CS_CUP.Runtime.Symbol)CUP_TinyParser_stack.elementAt(CUP_TinyParser_top - 3)).value; ListaSentencia en = (ListaSentencia)((TUVienna.CS_CUP.Runtime.Symbol)CUP_TinyParser_stack.elementAt(CUP_TinyParser_top - 1)).value; RESULT = new Condicional(c, en, null, s.Linea, s.Columna); CUP_TinyParser_result = new TUVienna.CS_CUP.Runtime.Symbol(4 /*sent_if*/, RESULT); } return(CUP_TinyParser_result); /*. . . . . . . . . . . . . . . . . . . .*/ case 8: // sent ::= error { Sentencia RESULT = null; CUP_TinyParser_result = new TUVienna.CS_CUP.Runtime.Symbol(3 /*sent*/, RESULT); } return(CUP_TinyParser_result); /*. . . . . . . . . . . . . . . . . . . .*/ case 7: // sent ::= fuction_call { Sentencia RESULT = null; Sentencia s = (Sentencia)((TUVienna.CS_CUP.Runtime.Symbol)CUP_TinyParser_stack.elementAt(CUP_TinyParser_top - 0)).value; RESULT = s; CUP_TinyParser_result = new TUVienna.CS_CUP.Runtime.Symbol(3 /*sent*/, RESULT); } return(CUP_TinyParser_result); /*. . . . . . . . . . . . . . . . . . . .*/ case 6: // sent ::= sent_assign { Sentencia RESULT = null; Sentencia s = (Sentencia)((TUVienna.CS_CUP.Runtime.Symbol)CUP_TinyParser_stack.elementAt(CUP_TinyParser_top - 0)).value; RESULT = s; CUP_TinyParser_result = new TUVienna.CS_CUP.Runtime.Symbol(3 /*sent*/, RESULT); } return(CUP_TinyParser_result); /*. . . . . . . . . . . . . . . . . . . .*/ case 5: // sent ::= sent_repeat { Sentencia RESULT = null; Sentencia s = (Sentencia)((TUVienna.CS_CUP.Runtime.Symbol)CUP_TinyParser_stack.elementAt(CUP_TinyParser_top - 0)).value; RESULT = s; CUP_TinyParser_result = new TUVienna.CS_CUP.Runtime.Symbol(3 /*sent*/, RESULT); } return(CUP_TinyParser_result); /*. . . . . . . . . . . . . . . . . . . .*/ case 4: // sent ::= sent_if { Sentencia RESULT = null; Sentencia s = (Sentencia)((TUVienna.CS_CUP.Runtime.Symbol)CUP_TinyParser_stack.elementAt(CUP_TinyParser_top - 0)).value; RESULT = s; CUP_TinyParser_result = new TUVienna.CS_CUP.Runtime.Symbol(3 /*sent*/, RESULT); } return(CUP_TinyParser_result); /*. . . . . . . . . . . . . . . . . . . .*/ case 3: // secuencia_sent ::= sent { ListaSentencia RESULT = null; Sentencia s = (Sentencia)((TUVienna.CS_CUP.Runtime.Symbol)CUP_TinyParser_stack.elementAt(CUP_TinyParser_top - 0)).value; RESULT = new ListaSentencia(); RESULT.agregarElemento(s); CUP_TinyParser_result = new TUVienna.CS_CUP.Runtime.Symbol(2 /*secuencia_sent*/, RESULT); } return(CUP_TinyParser_result); /*. . . . . . . . . . . . . . . . . . . .*/ case 2: // secuencia_sent ::= secuencia_sent PUNTO_Y_COMA sent { ListaSentencia RESULT = null; ListaSentencia sc = (ListaSentencia)((TUVienna.CS_CUP.Runtime.Symbol)CUP_TinyParser_stack.elementAt(CUP_TinyParser_top - 2)).value; Sentencia s = (Sentencia)((TUVienna.CS_CUP.Runtime.Symbol)CUP_TinyParser_stack.elementAt(CUP_TinyParser_top - 0)).value; sc.agregarElemento(s); RESULT = sc; CUP_TinyParser_result = new TUVienna.CS_CUP.Runtime.Symbol(2 /*secuencia_sent*/, RESULT); } return(CUP_TinyParser_result); /*. . . . . . . . . . . . . . . . . . . .*/ case 1: // programa ::= secuencia_sent { Programa RESULT = null; ListaSentencia sc = (ListaSentencia)((TUVienna.CS_CUP.Runtime.Symbol)CUP_TinyParser_stack.elementAt(CUP_TinyParser_top - 0)).value; RESULT = new Programa(sc, 1, 0); CUP_TinyParser_result = new TUVienna.CS_CUP.Runtime.Symbol(1 /*programa*/, RESULT); } return(CUP_TinyParser_result); /*. . . . . . . . . . . . . . . . . . . .*/ case 0: // $START ::= programa EOF { object RESULT = null; Programa start_val = (Programa)((TUVienna.CS_CUP.Runtime.Symbol)CUP_TinyParser_stack.elementAt(CUP_TinyParser_top - 1)).value; RESULT = start_val; CUP_TinyParser_result = new TUVienna.CS_CUP.Runtime.Symbol(0 /*$START*/, RESULT); } /* ACCEPT */ CUP_TinyParser_parser.done_parsing(); return(CUP_TinyParser_result); /* . . . . . .*/ default: throw new System.Exception( "Invalid action number found in internal parse table"); } }
public object Ejecutar(Ambito ambito) { try { this.numero = Estatico.numPregunta; Estatico.numPregunta++; DamePregunta dame = new DamePregunta(identificador, parametros, clase, linea, columna, estilo.tipo, "", this.numero); Pregunta p = dame.getPregunta(ambito); if (p != null) { Expresion p1 = estilo.parametros.ElementAt(0); Expresion p2 = estilo.parametros.ElementAt(1); Object val1 = p1.getValor(ambito); Object val2 = p2.getValor(ambito); Objeto ob = dame.ob; Ambito auxiliar = dame.ambPregu; String etiquetaV = "Verdadero"; String etiquetaF = "Falso"; if (val1 is String && val2 is String) { etiquetaV = (String)val1; etiquetaF = (String)val2; } MuestraForm: Condicional c = new Condicional(p, etiquetaV, etiquetaF, linea, columna, clase, ambito.archivo); c.ShowDialog(); String respuesta = c.respuesta; if (respuesta.Equals("")) { this.valorResp = Estatico.respuestaPorDefecto(this.casteo); } else { this.valorResp = Estatico.casteaRespuestaA(respuesta, valorResp, this.casteo); } if (valorResp is null) { TError error = new TError("Semantico", "No se logro Castear la respuesta a tipo: " + this.casteo.ToString() + " | Clase: " + clase + " | Archivo: " + ambito.archivo, linea, columna, false); Estatico.errores.Add(error); Estatico.ColocaError(error); goto MuestraForm; } if (!llamaARespuesta(auxiliar, valorResp)) { goto MuestraForm; } PreguntaAlmacenada nueva = new PreguntaAlmacenada(this.identificador, p.etiqueta, this.numero); nueva.addAnswer(this.valorResp.ToString()); Estatico.resps.Add(nueva); ob.ambito = dame.ambPregu; if (c.salir != null) { return(c.salir); } } } catch (Exception e) { TError error = new TError("Ejecucion", "Se produjo un error de Ejecucion en la ejecucion de Pregunta De tipo: " + estilo.tipo + " | Clase: " + clase + " | Archivo: " + ambito.archivo + " | Mensaje: " + e.Message, linea, columna, false); Estatico.errores.Add(error); Estatico.ColocaError(error); } return(new Nulo()); }
//procedimiento recursivo que genera el arbol private void generar(NodoArbol nodoActual) { //Valido nodos nulos para evitar incluir condicionales en generacion de nodos cuando es nulo if (nodoActual == null) { return; } if (nodoActual.GetType() == typeof(Programa)) { Programa n = (Programa)nodoActual; generar(n.Sentencias); } else if (nodoActual.GetType() == typeof(ListaSentencia)) { ListaSentencia ls = (ListaSentencia)nodoActual; foreach (Sentencia sent in ls.getLista()) { generar(sent); } } else if (nodoActual.GetType() == typeof(Condicional)) { Emit.LocalBuilder tmpVarLogico; Condicional n = (Condicional)nodoActual; generar(n.Condicion); this.il.Emit(Emit.OpCodes.Ldc_I4_0); //Ingreso constante 0 this.il.Emit(Emit.OpCodes.Ceq); //Comparo si es falso (es 0) //Almaceno este resultado en una variable temporal tmpVarLogico = this.il.DeclareLocal(typeof(bool)); this.il.Emit(Emit.OpCodes.Stloc, tmpVarLogico); //cargo el resultado de la variable temporal this.il.Emit(Emit.OpCodes.Ldloc, tmpVarLogico); Emit.Label bloqueFalso = this.il.DefineLabel(); //salto en caso que sea verdadero el resultado es decir es cero la evaluacion del (pila==0) hago el sino this.il.Emit(Emit.OpCodes.Brtrue, bloqueFalso); generar(n.Entonces); Emit.Label finSi = this.il.DefineLabel(); this.il.Emit(Emit.OpCodes.Br, finSi); this.il.MarkLabel(bloqueFalso); generar(n.Sino); this.il.MarkLabel(finSi); } else if (nodoActual.GetType() == typeof(RepitaHasta)) { RepitaHasta n = (RepitaHasta)nodoActual; Emit.LocalBuilder tmpCondicion; tmpCondicion = this.il.DeclareLocal(typeof(bool)); Emit.Label sentenciasRepita = this.il.DefineLabel(); this.il.MarkLabel(sentenciasRepita); this.il.Emit(Emit.OpCodes.Nop); //emito primera sentencia vacia generar(n.Sentencias); generar(n.Condicion); this.il.Emit(Emit.OpCodes.Stloc, tmpCondicion); //almaceno resultado de condicion del mientras this.il.Emit(Emit.OpCodes.Ldloc, tmpCondicion); //cargo resultado de condicion del mientras this.il.Emit(Emit.OpCodes.Brfalse, sentenciasRepita); } else if (nodoActual.GetType() == typeof(Asignacion)) { Asignacion n = (Asignacion)nodoActual; generar(n.Expr); Almacenar(n.Id.Nombre.Texto, this.il); } else if (nodoActual.GetType() == typeof(LLamadaFuncion)) //Leer, Escribir { LLamadaFuncion n = (LLamadaFuncion)nodoActual; List <FuncionDef> funs = NucleoLenguaje.Instancia.getFuncBasicas(); //En la lista de definiciones de funciones estandar busco la definicion de la llamada para funcion deseada foreach (FuncionDef fun in funs) { if (n.Id.Texto.Equals(fun.Nombre.Texto)) { fun.ejecutarMetodo(il, n.Params); } } } else if (nodoActual.GetType() == typeof(NumeroEntero)) { NumeroEntero n = (NumeroEntero)nodoActual; this.il.Emit(Emit.OpCodes.Ldc_I4, convertir_a_entero(n.Token.Texto)); } else if (nodoActual.GetType() == typeof(Variable)) { Variable n = (Variable)nodoActual; if (!TablaDireccionesSimbolos.ContainsKey(n.Nombre.Texto)) { throw new System.Exception("ERROR-0008 fallo en analisis semantico Variable no declarada encontrada durante generacion '" + n.Nombre.Texto + "'"); } else { this.il.Emit(Emit.OpCodes.Ldloc, TablaDireccionesSimbolos[n.Nombre.Texto]); } } else if (nodoActual.GetType() == typeof(Suma)) { Suma n = (Suma)nodoActual; generar(n.ExprIzq); generar(n.ExprDer); this.il.Emit(Emit.OpCodes.Add); } else if (nodoActual.GetType() == typeof(Resta)) { Resta n = (Resta)nodoActual; generar(n.ExprIzq); generar(n.ExprDer); this.il.Emit(Emit.OpCodes.Sub); } else if (nodoActual.GetType() == typeof(Multiplicacion)) { Multiplicacion n = (Multiplicacion)nodoActual; generar(n.ExprIzq); generar(n.ExprDer); this.il.Emit(Emit.OpCodes.Mul); } else if (nodoActual.GetType() == typeof(Division)) { Division n = (Division)nodoActual; generar(n.ExprIzq); generar(n.ExprDer); this.il.Emit(Emit.OpCodes.Div); } else if (nodoActual.GetType() == typeof(Menor)) { Menor n = (Menor)nodoActual; generar(n.ExprIzq); generar(n.ExprDer); this.il.Emit(Emit.OpCodes.Clt); } else if (nodoActual.GetType() == typeof(Igual)) { Igual n = (Igual)nodoActual; generar(n.ExprIzq); generar(n.ExprDer); this.il.Emit(Emit.OpCodes.Ceq); } else { Console.WriteLine("ERROR-0006 Error tipo de Nodo no identificado"); } }