private void Button1_Click(object sender, RoutedEventArgs e)
        {
            string codigo         = textBox.Text;
            Lineas l              = new Lineas();
            int    contadorLineas = textBox.LineCount;

            for (int i = 0; i < contadorLineas; i++)
            {
                l.addLinea(i + 1, textBox.GetLineText(i));
            }
            int elementos = l.getSize();

            /*
             * for (int i = 0; i < elementos; i++)
             * {
             *  Console.WriteLine("Linea " + l.linea[i] + ": " + l.token[i]);
             *  Console.Write("Tokens en linea: ");
             *  foreach (string s in l.tokens[i])
             *  {
             *      Console.Write( s + " " );
             *  }
             *  Console.WriteLine();
             * }
             */
            compilador.automata(ref l, elementos);
        }
Exemplo n.º 2
0
        public void automata(ref Lineas l, int elementos)
        {
            List <string> toksCompletos = new List <string>();
            List <int>    noLinea       = new List <int>();
            int           tamTokens     = 0;

            for (int i = 0; i < l.getSizeArrayTokens(); i++)
            {
                tamTokens += l.tokens[i].Length;
            }
            posicion = 0;
            for (int i = 0; i < elementos; i++)
            {
                foreach (string tok in l.tokens[i])
                {
                    if (string.IsNullOrEmpty(tok))
                    {
                        posicion++;
                        CheckFin(tamTokens, posicion, estadoActual);
                        continue;
                    }
                    toksCompletos.Add(tok);
                    noLinea.Add(l.linea[i]);
                    switch (tok)
                    {
                    case P:
                        valor = 0;
                        Console.WriteLine(P);
                        break;

                    case I:
                        valor = 1;
                        Console.WriteLine(I);
                        break;

                    case F:
                        valor = 2;
                        Console.WriteLine(F);
                        break;

                    case DC:
                        valor = 3;
                        Console.WriteLine(DC);
                        break;

                    case EC:
                        valor = 4;
                        Console.WriteLine(EC);
                        break;

                    case D:
                        valor = 5;
                        Console.WriteLine(D);
                        break;

                    case CM:
                        valor = 6;
                        Console.WriteLine(CM);
                        break;

                    case PA:
                        valor = 7;
                        Console.WriteLine(PA);
                        break;

                    case N:
                        valor = 8;
                        Console.WriteLine(N);
                        break;

                    case CT:
                        valor = 9;
                        Console.WriteLine(CT);
                        break;

                    case C:
                        valor = 10;
                        Console.WriteLine(C);
                        break;

                    case PC:
                        valor = 11;
                        Console.WriteLine(PC);
                        break;

                    case t:
                    case e:
                    case f:
                    case d:
                    case n:
                        valor = 12;
                        break;

                    default:
                        valor = 13;
                        Console.WriteLine("Malo");
                        break;
                    }
                    if (valor == 13)
                    {
                        posicion++;
                        continue;
                    }
                    // Console.WriteLine("EA:" + estadoActual);
                    // Console.WriteLine("valor:" + valor);
                    // Error de secuencia de automata
                    if (matrizTrans[estadoActual, valor] == 0)
                    {
                        Console.WriteLine("Error sintactico en la linea: " + l.linea[i] + ", token inesperado: " + tok);
                        estadoActual = valor;
                        posicion++;
                        CheckFin(tamTokens, posicion, estadoActual);
                    }
                    // todo bien
                    else
                    {
                        Console.WriteLine("OK");
                        estadoActual = matrizTrans[estadoActual, valor];
                        posicion++;
                        CheckFin(tamTokens, posicion, estadoActual);
                    }
                }
            }
            estadoActual = 0;
            Console.WriteLine("--------------------------------------------");
            List <DibujarCara>  dibujarCaraList  = new List <DibujarCara>();
            List <EliminarCara> eliminarCaraList = new List <EliminarCara>();
            List <Dormir>       dormirList       = new List <Dormir>();
            List <CambiarModo>  cambiarModoList  = new List <CambiarModo>();

            int noToksCompletos = toksCompletos.Count;

            for (int j = 0; j < noToksCompletos; j++)
            {
                switch (toksCompletos[j])
                {
                case DC:
                    //  Console.WriteLine(DC);
                    DibujarCara dc = new DibujarCara(toksCompletos[j + 2], toksCompletos[j + 4], toksCompletos[j + 6], toksCompletos[j + 8], toksCompletos[j + 10]);
                    //dc.imprimirAtributos();
                    if (!dc.checarDibujarCara(ref dibujarCaraList, toksCompletos[j + 8]))
                    {
                        Console.WriteLine("DC,Error semantico en linea: " + noLinea[j]);
                        j += 11;
                        break;
                    }
                    dibujarCaraList.Add(dc);
                    j += 11;
                    break;

                case EC:
                    // Console.WriteLine(EC);
                    EliminarCara ec = new EliminarCara(toksCompletos[j + 2]);
                    if (!ec.checarEliminarCara(ref dibujarCaraList, toksCompletos[j + 2]))
                    {
                        Console.WriteLine("EC,Error semantico en linea: " + noLinea[j]);
                        j += 11;
                        break;
                    }
                    ec.imprimirAtributos();
                    // instrucciones.Add(ec);
                    j += 3;
                    break;

                case D:
                    //Console.WriteLine(D);
                    Dormir d = new Dormir(toksCompletos[j + 2]);
                    d.imprimirAtributos();
                    //instrucciones.Add(d);
                    j += 3;
                    break;

                case CM:
                    //Console.WriteLine(CM);
                    CambiarModo cm = new CambiarModo(toksCompletos[j + 2], toksCompletos[j + 4]);
                    if (!cm.checarCambiarModo(ref dibujarCaraList, toksCompletos[j + 2]))
                    {
                        Console.WriteLine("CM,Error semantico en linea: " + noLinea[j]);
                        j += 11;
                        break;
                    }
                    cm.imprimirAtributos();
                    //instrucciones.Add(cm);
                    j += 5;
                    break;
                }
            }
        }