예제 #1
0
 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;
 }
예제 #2
0
        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 !";
            }
        }
예제 #3
0
        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();
        }
예제 #4
0
        /** 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");
            }
        }
예제 #5
0
        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());
        }
예제 #6
0
        //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");
            }
        }