コード例 #1
0
        public Compilador(TextDocument Document, ResultadosCompilacion ResultadosCompilacion)
        {
            this.Document = Document;

            this.ResultadosCompilacion = ResultadosCompilacion;
            //this.TurboC = new BorlandC();
            //this.ReconceTokens = new ReconoceTokens(this.ResultadosCompilacion, this.PropiedadesPrograma);
        }
コード例 #2
0
ファイル: Indexado.cs プロジェクト: Jouna77/8086VCPU
 /// <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));
 }
コード例 #3
0
ファイル: Inmediato.cs プロジェクト: Jouna77/8086VCPU
        /// <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));
        }
コード例 #4
0
ファイル: Indexado.cs プロジェクト: Jouna77/8086VCPU
        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);
        }
コード例 #5
0
ファイル: Direccionamiento.cs プロジェクト: Jouna77/8086VCPU
        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);
        }
コード例 #6
0
ファイル: DirectoI.cs プロジェクト: Jouna77/8086VCPU
        /// <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));
        }
コード例 #7
0
ファイル: IndirectoI.cs プロジェクト: Jouna77/8086VCPU
        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);
            //}
        }
コード例 #8
0
ファイル: DirectoI.cs プロジェクト: Jouna77/8086VCPU
        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);
            //}
        }
コード例 #9
0
ファイル: Inmediato.cs プロジェクト: Jouna77/8086VCPU
        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);
            }
        }
コード例 #10
0
        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);
            }
        }
コード例 #11
0
        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);
            //}
        }
コード例 #12
0
ファイル: AutoCompletado.cs プロジェクト: Jouna77/8086VCPU
        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();
        }
コード例 #13
0
        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);
        }
コード例 #14
0
 public AnalizadorSintactico(AnalizadorLexico Lexica, TextDocument Documento, ResultadosCompilacion Errores) : base(Documento, Errores)
 {
     this.Lexica      = Lexica;
     this.CodeSegment = new CodeSegment();
 }
コード例 #15
0
 /// <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));
 }
コード例 #16
0
 protected override Instruccion EsValida(LineaLexica linea, ResultadosCompilacion Errores, TipoInstruccion tipo)
 {
     throw new NotImplementedException();
 }
コード例 #17
0
ファイル: Direccionamiento.cs プロジェクト: Jouna77/8086VCPU
 protected abstract Instruccion EsValida(LineaLexica linea, ResultadosCompilacion Errores, TipoInstruccion tipo);
コード例 #18
0
 public Sintesis(AnalizadorSintactico Semantico, TextDocument Documento, ResultadosCompilacion Errores) : base(Documento, Errores)
 {
     this.CodeSegment = Semantico.CodeSegment;
 }
コード例 #19
0
 protected Analizador(TextDocument Documento, ResultadosCompilacion Errores)
 {
     this.Documento = Documento;
     this.EsValido  = false;
     this.Errores   = Errores;
 }
コード例 #20
0
ファイル: AnalizadorLexico.cs プロジェクト: Jouna77/8086VCPU
 public AnalizadorLexico(TextDocument Documento, ResultadosCompilacion Errores) : base(Documento, Errores)
 {
     this.FinLineas     = false;
     this.LineasLexicas = new List <LineaLexica>();
     this.Simbolos      = new List <Token>();
 }