public static long calculaTamaño(string first, string last) { long inicio; long final; inicio = MetodosAuxiliares.hexadecimalADecimal(first.Split('\t').First()); final = MetodosAuxiliares.hexadecimalADecimal(last.Split('\t').First()); return(final - inicio); }
private void incrementaInstruccionDirectiva(string[] codigo) { if (this.instrucciones.Keys.Contains(codigo[1]) || codigo[1].Equals("WORD")) { this.cp += 3; } else if (this.directiva.Contains(codigo[1])) { codigo[2] = codigo[2].ToUpper(); switch (codigo[1]) { case "BYTE": if (codigo[2].Contains("X")) { cp += (long)Math.Ceiling((decimal)(codigo[2].Length - 3) / 2); } else if (codigo[2].Contains("C")) { cp += codigo[2].Length - 3; } break; case "RESW": cp += 3 * long.Parse(codigo[2]); break; case "RESB": codigo[2] = codigo[2].ToUpper(); if (codigo[2].Contains("H")) { cp += MetodosAuxiliares.hexadecimalADecimal(codigo[2].Replace("H", "")); } else { cp += long.Parse(codigo[2]); } break; } } }
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; }