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(); }
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; } }
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"); }
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"); }
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); }
/// <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); }