static void Main(string[] args) { try { int id; string nombre; List <string> archivo; SICEstandarLexer lexer; CommonTokenStream tokens; SICEstandarParser parser; StreamWriter writer; TextWriter outPutError; TextWriter outPut; while (true) { Console.Clear(); Console.WriteLine("Nombre del archivo:"); nombre = Console.ReadLine(); if (nombre.Contains(".s")) { nombre = nombre.Replace(".s", ""); } archivo = MetodosAuxiliares.leeArchivo(nombre); outPutError = Console.Error; outPut = Console.Out; id = 0; using (writer = new StreamWriter(new FileStream(Directory.GetCurrentDirectory() + @"\" + "tmp.s", FileMode.Create))) { foreach (string linea in archivo) { Console.SetOut(writer); Console.Write("Linea " + id + ": "); lexer = new SICEstandarLexer(new AntlrInputStream(linea)); tokens = new CommonTokenStream(lexer); parser = new SICEstandarParser(tokens); parser.prog(); Console.SetError(writer); Console.Write("\n"); Console.SetOut(outPutError); id++; } } Console.SetOut(outPut); MetodosAuxiliares.generaSalida(nombre); Console.WriteLine("Desea salir? Y/N"); nombre = Console.ReadLine(); nombre = nombre.ToUpper(); if (nombre.Equals("Y")) { break; } } } catch (FileNotFoundException) { Console.WriteLine("Ese archivo no existe"); } }
public void paso1(DataGridView dataGridViewIntermedio) { string[] codigo; MyErrorListener errorListener; this.lineasError = new List <bool>(); this.errores = new List <string>(); this.intermedio = new List <string>(); this.tabSim = new Dictionary <string, long>(); for (int i = 0; i < this.Archivo.Count; i++) { lexer = new SICEstandarLexer(new AntlrInputStream(this.Archivo[i])); tokens = new CommonTokenStream(lexer); parser = new SICEstandarParser(tokens); errorListener = new MyErrorListener(i + 1); parser.AddErrorListener(errorListener); parser.prog(); codigo = this.Archivo[i].Split('\t'); this.lineasError.Add(errorListener.ExisteError); if (!errorListener.ExisteError) { try { if (!codigo[1].Equals("START") && !codigo[1].Equals("END")) { this.ensamblaIntermedio(dataGridViewIntermedio, codigo, i, "No"); if (!string.IsNullOrEmpty(codigo[0])) { this.TabSim.Add(codigo[0], this.cp); } this.incrementaInstruccionDirectiva(codigo); } else if (codigo[1].Equals("START")) { codigo[2] = codigo[2].ToUpper(); if (codigo[2].Contains("H")) { this.cp = MetodosAuxiliares.hexadecimalADecimal(codigo[2].Replace("H", "")); this.ensamblaIntermedio(dataGridViewIntermedio, codigo, i, "No"); } else { this.cp = long.Parse(codigo[2]); this.ensamblaIntermedio(dataGridViewIntermedio, codigo, i, "no"); } } else if (codigo[1].Equals("END")) { //this.intermedio.Add(this.cp.ToString() + "\t" + this.archivo[i]); this.ensamblaIntermedio(dataGridViewIntermedio, codigo, i, "no"); } } catch (ArgumentException) { this.errores.Add("Linea" + (i + 1).ToString() + ": Error Simbolo repetido"); dataGridViewIntermedio.Rows.Remove(dataGridViewIntermedio.Rows[dataGridViewIntermedio.Rows.Count - 1]); this.intermedio.Remove(this.intermedio.Last()); //this.intermedio.Add(this.cp.ToString() + "\t" + this.archivo[i] + "*"); this.ensamblaIntermedio(dataGridViewIntermedio, codigo, i, "Simbolo"); this.incrementaInstruccionDirectiva(codigo); } } else { if (!string.IsNullOrEmpty(this.Archivo[i])) { if (this.instrucciones.Keys.Contains(codigo[1]) || this.Directivas.Contains(codigo[1]) || codigo[1].Equals("WORD")) { if (this.instrucciones.Keys.Contains(codigo[0]) || this.Directivas.Contains(codigo[0]) || codigo[0].Equals("WORD")) { this.errores.Add("Linea" + (i + 1).ToString() + ": Error de sintaxis la etiqueta no puede ser la palabra reservada \"" + codigo[0] + "\""); this.ensamblaIntermedio(dataGridViewIntermedio, codigo, i, "Syntax"); } else { this.errores.Add("Linea" + (i + 1).ToString() + ": Error de sintaxis el operando: \"" + codigo[2] + "\" Esta mal escrito"); this.ensamblaIntermedio(dataGridViewIntermedio, codigo, i, "Syntax"); } } else { this.errores.Add("Linea" + (i + 1).ToString() + ": Error instruccion \"" + codigo[1] + "\" no existe"); this.ensamblaIntermedio(dataGridViewIntermedio, codigo, i, "Instruccion"); } } else { this.errores.Add("Linea" + (i + 1).ToString() + ": Error de sintaxis no debe haber lineas vacias"); codigo = new string[] { "\t", "\t", "\t" }; this.ensamblaIntermedio(dataGridViewIntermedio, codigo, i, "Vacia"); } } } this.paso1Logrado = true; }