public Compilador(TextDocument Document, ResultadosCompilacion ResultadosCompilacion) { this.Document = Document; this.ResultadosCompilacion = ResultadosCompilacion; //this.TurboC = new BorlandC(); //this.ReconceTokens = new ReconoceTokens(this.ResultadosCompilacion, this.PropiedadesPrograma); }
/// <summary> /// Modo indexado MOV AX,[BX + SI/DI ] /// </summary> /// <param name="linea"></param> /// <param name="Errores"></param> /// <param name="tipo"></param> /// <returns></returns> protected override Instruccion EsValida(LineaLexica linea, ResultadosCompilacion Errores, TipoInstruccion tipo) { if (linea.Elementos >= 8) { return(new Indexado(linea[1].Lexema, linea[6].Lexema, Errores, linea, tipo)); } return(new Indexado(linea[1].Lexema, linea[4].Lexema, Errores, linea, tipo)); }
/// <summary> /// Modo inmediato MOV AX,09h /// </summary> /// <param name="linea"></param> /// <param name="Errores"></param> /// <param name="tipo"></param> /// <returns></returns> protected override Instruccion EsValida(LineaLexica linea, ResultadosCompilacion Errores, TipoInstruccion tipo) { Numero numero = new Numero(linea[3]); if (numero.Tamaño == Tamaños.Invalido) { Errores.ResultadoCompilacion($"Valor númerico incorrecto", linea.LineaDocumento); } return(new Inmediato(linea[1].Lexema, numero, Errores, linea, tipo)); }
public Indexado(string NombreRegistroD, string NombreRegistroDesplazamiento, ResultadosCompilacion resultados, LineaLexica cs, TipoInstruccion tipo) : base(cs, tipo) { this.NombreRegistroDesplazamiento = NombreRegistroDesplazamiento; this.NombreRegistroD = NombreRegistroD; Destino = Registros.PorNombre(NombreRegistroD); TamañoDestino = TamañoRegistro(NombreRegistroD); }
public Instruccion Evaluar(string Lexema, LineaLexica linea, ResultadosCompilacion Errores) { string texto = linea.Texto.Replace(Lexema, string.Empty).Trim(); Match match = this.ExpresionRegular.Match(texto); if (match.Success) { return(EsValida(linea, Errores, PorNombre(Lexema))); } return(null); }
/// <summary> /// DirectoI [001],AX /// </summary> /// <param name="linea"></param> /// <param name="Errores"></param> /// <param name="tipo"></param> /// <returns></returns> protected override Instruccion EsValida(LineaLexica linea, ResultadosCompilacion Errores, TipoInstruccion tipo) { Numero numero = new Numero(linea[2]); if (numero.Tamaño == Tamaños.Invalido) { Errores.ResultadoCompilacion($"Valor númerico incorrecto", linea.LineaDocumento); } else if (numero.Tamaño < Tamaños.Palabra) { numero.ByteEnPalabra(); } return(new DirectoI(linea[5].Lexema, numero, Errores, linea, tipo)); }
public IndirectoI(string NombreRegistroD, string NombreRegistroF, ResultadosCompilacion resultados) : base() { Destino = Registros.PorNombre(NombreRegistroD); TamañoDestino = TamañoRegistro(NombreRegistroD); Fuente = Registros.PorNombre(NombreRegistroF); TamañoFuente = TamañoRegistro(NombreRegistroF); //Validar que la dirección sea valdida? //if (TamañoFuente != TamañoDestino) //{ // resultados.ResultadoCompilacion($"El tamaño de '{NombreRegistroF}' - {TamañoFuente} no conicide con el tamaño de '{NombreRegistroD.ToUpper()}' - {TamañoDestino}", LineaDocumento); //} }
public DirectoI(string NombreRegistro, Numero Fuente, ResultadosCompilacion resultados, LineaLexica cs, TipoInstruccion tipo) : base(NombreRegistro, Fuente, resultados, cs, tipo) { NombreRegistroD = NombreRegistro; Destino = Registros.PorNombre(NombreRegistro); TamañoDestino = TamañoRegistro(NombreRegistroD); this.Fuente = Fuente; TamañoFuente = this.Fuente.Tamaño; //Validar que la dirección sea valdida? //if (TamañoFuente > TamañoDestino) //{ // resultados.ResultadoCompilacion($"El valor '{Fuente.Hex}' - {TamañoFuente} sobrepasa el tamaño del operando de destino '{NombreRegistro.ToUpper()}' - {TamañoDestino}", LineaDocumento); //} }
public Inmediato(string NombreRegistroD, Numero Fuente, ResultadosCompilacion resultados, LineaLexica cs, TipoInstruccion tipo) : base(cs, tipo) { this.NombreRegistroD = NombreRegistroD.ToUpper(); Destino = Registros.PorNombre(this.NombreRegistroD); TamañoDestino = TamañoRegistro(this.NombreRegistroD); this.Fuente = Fuente; TamañoFuente = this.Fuente.Tamaño; if (TamañoFuente > TamañoDestino) { resultados.ResultadoCompilacion($"El valor '{Fuente.Hex}' - {TamañoFuente} sobrepasa el tamaño del operando de destino '{this.NombreRegistroD}' - {TamañoDestino}", LineaDocumento); } }
public PorRegistro(string NombreRegistroD, string NombreRegistroF, ResultadosCompilacion resultados, LineaLexica cs, TipoInstruccion tipo) : base(cs, tipo) { this.NombreRegistroF = NombreRegistroF; this.NombreRegistroD = NombreRegistroD; Destino = Registros.PorNombre(NombreRegistroD); TamañoDestino = TamañoRegistro(NombreRegistroD); Fuente = Registros.PorNombre(NombreRegistroF); TamañoFuente = TamañoRegistro(NombreRegistroF); if (TamañoFuente != TamañoDestino) { resultados.ResultadoCompilacion($"El tamaño de '{NombreRegistroF}' - {TamañoFuente} no conicide con el tamaño de '{NombreRegistroD.ToUpper()}' - {TamañoDestino}", LineaDocumento); } }
public Indirecto(string NombreRegistroD, string NombreRegistroF, ResultadosCompilacion resultados, LineaLexica cs, TipoInstruccion tipo) : base(cs, tipo) { this.NombreRegistroF = NombreRegistroF; this.NombreRegistroD = NombreRegistroD; Destino = Registros.PorNombre(NombreRegistroD); TamañoDestino = TamañoRegistro(NombreRegistroD); Fuente = Registros.PorNombre(NombreRegistroF); TamañoFuente = TamañoRegistro(NombreRegistroF); //Validar que la dirección sea valdida? //if (TamañoFuente != TamañoDestino) //{ // resultados.ResultadoCompilacion($"El tamaño de '{NombreRegistroF}' - {TamañoFuente} no conicide con el tamaño de '{NombreRegistroD.ToUpper()}' - {TamañoDestino}", LineaDocumento); //} }
public AutoCompletado(TextArea Texto, ResultadosCompilacion Errores) { this.Registros = new List <string>() { "AX", "AH", "AL", "BX", "BH", "BL", "CX", "CH", "CL", "DX", "DH", "DL", "SI", "DI" }; this.OperacionesAritmeticas = new List <string>() { "MOV", "ADD", "MUL", "SUB", "DIV" }; this.OperacionesLogicas = new List <string>() { "NOT", "OR", "NOR", "XOR", "XNOR", "AND", "NAND" }; this.Texto = Texto; this.Documento = this.Texto.Document; this.Errores = Errores; IniciarMarcadoDeErrores(); }
public Editor(IRegionManager RegionManager) : base(RegionManager) { this.Errores = new ResultadosCompilacion(); InitializeComponent(); this.CmbxEjemplos.ItemsSource = Ejemplos.Ejemplo.ListarEjemplos(); //this.CmbxEjemplos.SelectedItem = this.CmbxEjemplos.ItemsSource.OfType<Ejemplos.Ejemplo>().Last(); //this.AutoCompletado = new AutoCompletado(this.TxtMy.TextArea, this.Errores); //this.AutoCompletado.Analizar(); //TxtMy.SyntaxHighlighting = HighlightingManager.Instance.GetDefinition("My8086"); //TxtAsm.SyntaxHighlighting = HighlightingManager.Instance.GetDefinition("ASM"); ////TxtMy.Load($@"{Tools.Instance.LibraryPath}\..\..\Ejemplos\Movimientos.asm"); //TxtMy.Load($@"{Tools.Instance.LibraryPath}\..\..\Ejemplos\Burbuja.asm"); //TxtArchivo.Text = TxtMy.Document.FileName; // initial highlighting now set by XAML TxtMy.TextArea.TextEntering += TextEditor_TextArea_TextEntering; TxtMy.TextArea.TextEntered += TextEditor_TextArea_TextEntered; DispatcherTimer foldingUpdateTimer = new DispatcherTimer { Interval = TimeSpan.FromSeconds(2) }; foldingUpdateTimer.Tick += FoldingUpdateTimer_Tick; foldingUpdateTimer.Start(); /// TxtMy.TextArea.TextView.BackgroundRenderers.Add(new HighLight(TxtMy)); ///// this.Compilador = new Gui.Compilador.Compilador(TxtMy.TextArea.Document, this.Errores); }
public AnalizadorSintactico(AnalizadorLexico Lexica, TextDocument Documento, ResultadosCompilacion Errores) : base(Documento, Errores) { this.Lexica = Lexica; this.CodeSegment = new CodeSegment(); }
/// <summary> /// Modo indirecto MOV AX,[SI]/[DI] /// </summary> /// <param name="linea"></param> /// <param name="Errores"></param> /// <param name="tipo"></param> /// <returns></returns> protected override Instruccion EsValida(LineaLexica linea, ResultadosCompilacion Errores, TipoInstruccion tipo) { return(new Indirecto(linea[1].Lexema, linea[4].Lexema, Errores, linea, tipo)); }
protected override Instruccion EsValida(LineaLexica linea, ResultadosCompilacion Errores, TipoInstruccion tipo) { throw new NotImplementedException(); }
protected abstract Instruccion EsValida(LineaLexica linea, ResultadosCompilacion Errores, TipoInstruccion tipo);
public Sintesis(AnalizadorSintactico Semantico, TextDocument Documento, ResultadosCompilacion Errores) : base(Documento, Errores) { this.CodeSegment = Semantico.CodeSegment; }
protected Analizador(TextDocument Documento, ResultadosCompilacion Errores) { this.Documento = Documento; this.EsValido = false; this.Errores = Errores; }
public AnalizadorLexico(TextDocument Documento, ResultadosCompilacion Errores) : base(Documento, Errores) { this.FinLineas = false; this.LineasLexicas = new List <LineaLexica>(); this.Simbolos = new List <Token>(); }