コード例 #1
0
        public Nodo Instruccion(ParseTreeNode actual)
        {
            String toke = actual.Term.Name;

            switch (toke)
            {
            case "writeln":
                return(Main.Inst_Writeln(actual));

            case "write":
                return(Main.Inst_Write(actual));

            case "ifthen":
                return(Main.Inst_Ifthen(actual));

            case "ifelse":
                return(Main.Instru_IfElse(actual));

            case "caseof":
                return(Main.Case_OF(actual.ChildNodes[0]));

            case "whiledo":
                return(Main.While(actual));

            case "repeat":
                return(Main.Repeat(actual));

            case "no_for":
                return(Main.For(actual));

            case "asignacion":
                return(Asignaciones.Tipo_asignacion(actual));

            case "continue":
                return(Tranferencias.Sentencia_continue(actual));

            case "break":
                return(Tranferencias.Sentencia_break(actual));

            case "llamada_funciones":
                return(Main.LLamada_funcion(actual));

            case "exit":
                return(Tranferencias.Sentencia_Exit(actual));

            case "tabla_sym":
                return(Main.Instruccion_Graficar_ts(actual));
            }
            return(null);
        }
コード例 #2
0
        public static Nodo For(ParseTreeNode entrada)
        {
            int linea   = entrada.Span.Location.Line;
            int columna = entrada.Span.Location.Column;

            //captura de la expresion
            Asignacion1 asignacion = (Asignacion1)Asignaciones.Tipo_asignacion(entrada.ChildNodes[1]); //entrada.childNodes[1];

            string token          = entrada.ChildNodes[2].Term.Name.ToLower();
            bool   comportamiento = false;

            switch (token)
            {
            case "to":
                comportamiento = false;
                break;

            case "downto":
                comportamiento = true;
                break;
            }

            Nodo expresion = Expresion.Expresion.evaluar(entrada.ChildNodes[3]);

            token = entrada.ChildNodes[5].Term.Name;

            if (entrada.ChildNodes.Count == 6)
            {
                LinkedList <Nodo> temporal = new LinkedList <Nodo>();
                temporal.AddLast(Main_If(entrada.ChildNodes[5].ChildNodes[0]));
                return(new For(linea, columna, asignacion, expresion, temporal, comportamiento));
            }
            else if (entrada.ChildNodes.Count == 9)
            {
                LinkedList <Nodo> temporal;
                temporal = ListaMain_If(entrada.ChildNodes[6]);
                return(new For(linea, columna, asignacion, expresion, temporal, comportamiento));
            }

            return(null);
        }
コード例 #3
0
        public static void Instruccion(ParseTreeNode actual, LinkedList <Nodo> lista)
        {
            String toke = actual.Term.Name;

            switch (toke)
            {
            case "writeln":
                lista.AddLast(Main.Inst_Writeln(actual));
                break;

            case "write":
                lista.AddLast(Main.Inst_Write(actual));
                break;

            case "ifthen":
                lista.AddLast(Main.Inst_Ifthen(actual));
                break;

            case "ifelse":
                lista.AddLast(Main.Instru_IfElse(actual));
                break;

            case "caseof":
                lista.AddLast(Main.Case_OF(actual.ChildNodes[0]));
                break;

            case "whiledo":
                lista.AddLast(Main.While(actual));
                break;

            case "repeat":
                lista.AddLast(Main.Repeat(actual));
                break;

            case "no_for":
                lista.AddLast(Main.For(actual));
                break;

            case "asignacion":
                lista.AddLast(Asignaciones.Tipo_asignacion(actual));
                break;

            case "continue":
                lista.AddLast(Tranferencias.Sentencia_continue(actual));
                break;

            case "break":
                lista.AddLast(Tranferencias.Sentencia_break(actual));
                break;

            case "llamada_funciones":
                lista.AddLast(Main.LLamada_funcion(actual));
                break;

            case "exit":
                lista.AddLast(Tranferencias.Sentencia_Exit(actual));
                break;

            case "tabla_sym":
                lista.AddLast(Main.Instruccion_Graficar_ts(actual));
                break;

            case "sentencia_case":
                lista.AddLast(Main.Case_OF(actual));
                break;

            case "sentencia_while":
                lista.AddLast(Main.While_If(actual));
                break;

            case "sentencia_repeat":
                lista.AddLast(Main.Repeat(actual));
                break;

            case "sentencia_for":
                lista.AddLast(Main.For_if(actual));
                break;
            }
        }