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); }
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; } } }