Ejemplo n.º 1
0
        private void BtnCompiler_Click(object sender, EventArgs e)
        {
            ClearDataGrid();
            ErrorLog.ResetErrorList();
            var tab         = tabprimary.SelectedTab;
            var ContentFile = string.Empty;

            var    namefile = tab.Text;
            string proy     = Ltitleproyect.Text + @"\";
            string pathfile = Path.Combine(Environment.rootDir, proy, namefile);

            ContentFile = Helpers.ReadFile(pathfile);
            PrintLogProcess("-> Compilando archivo: " + namefile);
            TokenMewtow MewtowTok = new TokenMewtow();
            bool        Result    = MewtowTok.CompilerFile(ContentFile);

            if (Result)
            {
                var DataToken = MewtowTok.GetTokens();
                DataGridViewSymbol.DataSource            = DataToken;
                DataGridViewSymbol.Columns[0].HeaderText = "Token";
                DataGridViewSymbol.Columns[1].HeaderText = "X";
                DataGridViewSymbol.Columns[2].HeaderText = "Y";
                DataGridViewSymbol.Columns[3].HeaderText = "Tipo";
                DataGridViewSymbol.Columns[4].Visible    = false;
                DataGridViewSymbol.Columns[5].Visible    = false;
                DataGridViewSymbol.Columns[6].Visible    = false;
                DataGridViewSymbol.AutoResizeColumns();
                DataGridViewSymbol.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
                PrintLogProcess("-> Imprimiendo Tabla Simbolo..");
            }

            PrintLogProcess("-> Fin de compilacion: Error(" + ErrorLog.ContError + ")");
            PrintLogError();
        }
Ejemplo n.º 2
0
        private void BtnLexico_Click(object sender, EventArgs e)
        {
            Components  NewComp       = new Components();
            var         NTabPage      = NewComp.CreateTab("Lexico");
            var         NDataGridView = NewComp.CreateDataGridView();
            TokenMewtow MTok          = new TokenMewtow();
            var         DataTokens    = MTok.GetTokens();

            if (DataTokens != null)
            {
                NDataGridView.DataSource = DataTokens;
                NTabPage.Controls.Add(NDataGridView);
                tabprimary.Controls.Add(NTabPage);
                tabprimary.SelectedTab = NTabPage;
                NDataGridView.Columns[0].HeaderText = "Token";
                NDataGridView.Columns[1].HeaderText = "Indice X";
                NDataGridView.Columns[2].HeaderText = "Indice Y";
                NDataGridView.Columns[3].HeaderText = "Clasificacion";
                NDataGridView.Columns[4].HeaderText = "Fase Lexico";
                NDataGridView.Columns[5].Visible    = false;
                NDataGridView.Columns[6].Visible    = false;
                NDataGridView.AutoResizeColumns();
                NDataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
                PrintLogProcess("-> Ejecutando Proceso lexico");
            }
            else
            {
                Helpers.MewtowMessage("No ha compilado. !Hagalo!", "Error");
                PrintLogProcess("-> Fallo en ejecucion lexico...");
                return;
            }
        }
Ejemplo n.º 3
0
        private void BtnSintactico_Click(object sender, EventArgs e)
        {
            Components NewCompp      = new Components();
            var        NTabPagee     = NewCompp.CreateTab("Sintactico");
            TreeView   treesintactic = new TreeView();

            treesintactic.Nodes.Add(TokenMewtow.GenerateTreeSyntactic());
            treesintactic.Dock      = DockStyle.Fill;
            treesintactic.BackColor = Color.FromArgb(28, 30, 38);
            treesintactic.ForeColor = Color.White;

            NTabPagee.Controls.Add(treesintactic);
            tabprimary.Controls.Add(NTabPagee);
            tabprimary.SelectedTab = NTabPagee;
            PrintLogProcess("-> Ejecutantdo Fase Sintactico");
        }
Ejemplo n.º 4
0
        private void btnCodeCs_Click(object sender, EventArgs e)
        {
            PrintLogProcess("-> Inciando Traduccion a csharp");
            Components NewCompp  = new Components();
            var        NTabPagee = NewCompp.CreateTab("Codigo Csharp");
            var        NTextBox  = NewCompp.CreateTextBox();

            Grammar.clearCodeSharp();
            NTextBox.Text = "// Programa Escrito En Mewtow: Traducido a Csharp" + "\r\n";
            var MewtowSentence = TokenMewtow.GetListSentence();

            foreach (var Msent in MewtowSentence)
            {
                NTextBox.Text += Grammar.TranslatorToCsharp(Msent[2]) + "\r\n";
            }

            NTabPagee.Controls.Add(NTextBox);
            tabprimary.Controls.Add(NTabPagee);
            tabprimary.SelectedTab = NTabPagee;
            PrintLogProcess("-> Codigo Csharp Generado");
        }
Ejemplo n.º 5
0
        public int ValidSentence(string Sentence, int line)
        {
            // Regex regexReadLine = new Regex(@""+ MReadline +@"|(\w+\s+(\=)\s" + MReadline + @")");
            int    res = 0;
            string Mgrammarsentence     = string.Empty;
            Regex  regexComment         = new Regex(@"//\s+\b[a-zA-z]\w+");
            Regex  regexNamespace       = new Regex(@"" + MNamespace + @"\s\w+$");
            Regex  regexClass           = new Regex(@"" + MClass + @"\s\w+$");
            Regex  regexStatic          = new Regex(@"" + MStatic + @"\s" + MVoid + @"\s" + MMain + "$");
            Regex  regexDeclareVariable = new Regex(@"((" + MInt + @")|(" + MString + @"))+\s[a-z]\w+$");
            Regex  regexIntAsig         = new Regex(@"\w+\s+(\=)+\s+(\d|" + MInt + @"\(" + MReadline + @"\))$");
            Regex  regexStringAsig      = new Regex(@"\w+\s+(\=)+\s+(\'[\w\s\:\-\,]*\')$");
            Regex  regexConsole         = new Regex(@"" + MConsole + @"\s(\(\'[\w\s\:\-\,]*\'\))|(\(\'[\w\s\:\-\,]*\'\,\s\w+\))$");
            Regex  regexReadLine        = new Regex(@"" + MReadline + "");
            //  Regex regexReadLineAsig = new Regex(@"(\w+\s+(\=)\s" + MInt + @"\(" + MReadline + @"\))");
            Regex regexSwitch        = new Regex(@"" + MSwitch + @"+(\(\w+\))$");
            Regex regexCase          = new Regex(@"" + MCase + @"\s(\'\w+\'|\d)\:$");
            Regex regexBreak         = new Regex(@"" + MBreak + "");
            Regex regexDefault       = new Regex(@"" + MDefault + @"\:$");
            Regex rgexif             = new Regex(@"" + MIf + @"\s+(\w+|\d)+\s+(\=\=|\!\=|\>|\<)+\s+(\w+|\d)\:$");
            Regex regexDo            = new Regex(@"" + MDo + "");
            Regex regexWhile         = new Regex(@"" + MWhile + @"[\(][a-zA-z]\w+[\)]");
            Regex regexBraketopen    = new Regex(@"\{");
            Regex regexBraketclose   = new Regex(@"\}");
            Regex regexOperationAsig = new Regex(@"\w+\s+(\=)+\s+(\d|\w+)+\s+(\*|-|\/|\+)+\s+(\d|\w+)$");

            switch (Sentence)
            {
            case var vv when regexBraketopen.IsMatch(Sentence):
                Mgrammarsentence = "[Abre llave]";

                res = 3;
                break;

            case var vv when regexBraketclose.IsMatch(Sentence):
                Mgrammarsentence = "[Cierra llave]";

                res = 4;
                break;

            case var vv when regexComment.IsMatch(Sentence):
                Mgrammarsentence = "[un comentario]";

                res = 2;
                break;

            case var vv when regexReadLine.IsMatch(Sentence):
                Mgrammarsentence = "[Declaracion la sentencia ReadLine]";

                res = 1;
                break;

            case var vv when regexNamespace.IsMatch(Sentence):
                Mgrammarsentence = "[Declaracion del mnamespace]";

                numNamespace += 1;
                res           = 1;
                break;

            case var vv when regexClass.IsMatch(Sentence):
                Mgrammarsentence = "[Declaracion de mclase]";

                listmclass.Add(Sentence);
                numclass += 1;
                res       = 1;
                break;

            case var vv when regexStatic.IsMatch(Sentence):
                Mgrammarsentence = "[Declaracion de metodo principal mstatic]";

                method.Add(Sentence);
                numMethod += 1;
                res        = 1;
                break;

            case var vv when regexDeclareVariable.IsMatch(Sentence):
                Mgrammarsentence = "[Declaracion de variable]";

                declareVariable.Add(Sentence);
                numVaribles += 1;
                res          = 1;
                break;

            case var vv when regexIntAsig.IsMatch(Sentence):
                Mgrammarsentence = "[Asignacion de variable entero]";

                string[] mvar1 = Sentence.Split(' ');
                asigVariable.Add(mvar1[0]);
                res = 1;
                break;

            case var vv when regexStringAsig.IsMatch(Sentence):
                Mgrammarsentence = "[Asignacion de variable string]";

                string[] mvar2 = Sentence.Split(' ');
                asigVariable.Add(mvar2[0]);
                res = 1;
                break;

            case var vv when regexOperationAsig.IsMatch(Sentence):
                Mgrammarsentence = "[Asignacion y operacion de varibles,Enteros]";

                string[] mvar3 = Sentence.Split(' ');
                asigVariable.Add(mvar3[0]);
                res = 1;
                break;

            //   case var vv when regexReadLineAsig.IsMatch(Sentence):
            //     Mgrammarsentence = "[Asignacion y convertir a int]";
            //    string[] mvar4 = Sentence.Split(' ');
            //   asigVariable.Add(mvar4[0]);
            //   res = 1;
            // break;
            case var vv when regexConsole.IsMatch(Sentence):
                Mgrammarsentence = "[Declaracion de la sentencia ->" + Sentence + "]";

                res = 1;
                break;

            case var vv when regexSwitch.IsMatch(Sentence):
                Mgrammarsentence = "[Declaracion del control ->" + Sentence + "]";

                res = 1;
                break;

            case var vv when regexCase.IsMatch(Sentence):
                Mgrammarsentence = "[Declaracion del opcion ->" + Sentence + "]";

                res = 1;
                break;

            case var vv when regexDefault.IsMatch(Sentence):
                Mgrammarsentence = "[Declaracion del opcion ->" + Sentence + "]";

                res = 1;
                break;

            case var vv when regexBreak.IsMatch(Sentence):
                Mgrammarsentence = "[Declaracion del interruptor ->" + Sentence + "]";

                res = 1;
                break;

            case var vv when rgexif.IsMatch(Sentence):
                Mgrammarsentence = "[Declaracion del controlador " + Sentence + "]";

                res = 1;
                break;

            case var vv when regexDo.IsMatch(Sentence):
                Mgrammarsentence = "[Declaracion del incio de bucle -> " + Sentence + "]";

                res = 1;
                break;

            case var vv when regexWhile.IsMatch(Sentence):
                Mgrammarsentence = "[Declaracion del bucle ->" + Sentence + "]";

                res = 1;
                break;

            default:
                ErrorLog.AddError("-> Error en: [" + Sentence + "] ->linea: " + line);
                Mgrammarsentence = "[Declaracion desconocida del lenguaje.!]";
                res = 0;
                break;
            }

            TokenMewtow.AddListSentence(line + ";" + Mgrammarsentence + ";" + Sentence);
            return(res);
        }
Ejemplo n.º 6
0
        /// <summary>
        /// metodo compiler: se encarga de ejecutar todo el proceso de compilar el lenguaje.
        /// </summary>
        /// <param name="ContentFile"></param> recibe el string del archivo de texto.
        /// <returns></returns> retorna un true despues de haber culminado todo el proceso.
        public bool CompilerFile(string ContentFile)
        {
            ClearListToken();
            ClearListSentence();
            Grammar.clearListsemantic();
            Mbracketclose = 0;
            Mbracketopen  = 0;
            int x = 0;
            int y = 0;

            string[] DataSent      = CreateSentence(ContentFile);
            char[]   delimiterChar = { ' ' };

            foreach (var mSent in DataSent)
            {
                x += 1;
                y += 1;

                var     MSentence = mSent.Trim();
                Grammar gra       = new Grammar();
                int     result    = gra.ValidSentence(MSentence, y);
                if (result == 1 || result == 0)
                {
                    string[] mSen = MSentence.Split(delimiterChar);
                    foreach (var mtok in mSen)
                    {
                        KeyWord     kw       = new KeyWord();
                        string      typ      = kw.IsValidToken(mtok);
                        TokenMewtow NewToken = new TokenMewtow(mtok, x, y, typ, true, false, false);
                        ListToken.Add(NewToken);
                        x += 1;
                    }
                }
                else if (result == 2)
                {
                    TokenMewtow TokenComment = new TokenMewtow(mSent, x, y, "comentario", true, false, false);
                    ListToken.Add(TokenComment);
                }
                else if (result == 3)
                {
                    TokenMewtow TokenComment = new TokenMewtow(mSent, x, y, "Delimitador", true, false, false);
                    ListToken.Add(TokenComment);
                    Mbracketopen += 1;
                }
                else if (result == 4)
                {
                    TokenMewtow TokenComment = new TokenMewtow(mSent, x, y, "Delimitador", true, false, false);
                    ListToken.Add(TokenComment);
                    Mbracketclose += 1;
                }

                x = 0;
            }

            int resultbracket = Mbracketopen - Mbracketclose;

            if (resultbracket > 0)
            {
                ErrorLog.AddError("-> Tienes (" + resultbracket + ") Delimitador abierto");
            }
            else if (resultbracket < 0)
            {
                ErrorLog.AddError("-> Tienes (" + resultbracket * -1 + ") Delimitador cerrando");
            }

            Grammar.Semantic();
            return(true);
        }