public static void Main() { var lexerData = MakeLexer(); var rulesReader = new RulesReader(); var rules = rulesReader.GetRules(); var slr = new Slr(rules); var table = slr.GetTable(); var grouping = table.reestr .GroupBy(item => item.name) .Select(qb => new ColumnOfReestr { name = qb.Key, nextElement = qb.First().nextElement, countOfArgs = qb.First().countOfArgs, nameOfFunction = qb.First().nameOfFunction, nameOfNewToken = qb.First().nameOfNewToken, }) .ToList(); PrintRegistryTable(grouping); MakeAndLaunchRunner(table.rules, table.resultTable, grouping, lexerData); Console.ReadLine(); }
private async void btnAnalisisLexico_Click(object sender, EventArgs e) { //agregué esto #region Variables y lectura string path = ""; string path2 = ""; string archivo = ""; string nombreArchivo = ""; string ext = ""; OpenFileDialog ofd = new OpenFileDialog(); StringBuilder textB = new StringBuilder(); StringBuilder errores = new StringBuilder(); FolderBrowserDialog fbd = new FolderBrowserDialog(); if (ofd.ShowDialog() == DialogResult.OK) { path = ofd.FileName; } ext = Path.GetExtension(path); nombreArchivo = Path.GetFileName(path).Replace(ext, ""); StreamReader sr = new StreamReader(path); while (!sr.EndOfStream) { archivo += sr.ReadLine() + "\n"; } #endregion Lexer lexer = new Lexer(archivo); richTextBox1.Text = string.Empty; Show(); Task oTask = new Task(Loadd); oTask.Start(); await oTask; Hide(); //y esto #region EscrituraArchivo if (fbd.ShowDialog() == DialogResult.OK && !string.IsNullOrWhiteSpace(fbd.SelectedPath)) { path2 = fbd.SelectedPath; } StreamWriter sw = new StreamWriter(path2 + "/" + nombreArchivo + ".out"); //declarar la clase slr Slr metodoSlr = new Slr(); List <string> lista = new List <string>(); foreach (var token in lexer.TokensFilteredInfo) { textB.Append(token + "\n"); sw.WriteLine(token + "\n"); lista.Add(token.ToString()); } //convertir lista en pila para enviarla a clase analisis slr Stack pilaEntrada = new Stack(); lista.Reverse(); foreach (var s in lista) { pilaEntrada.Push(s); } metodoSlr.entrada = pilaEntrada; //llamada al metodo slr metodoSlr.pilaEstados.Push(0); if (metodoSlr.slrFunc(metodoSlr.entrada.Peek().ToString()) == true) { MessageBox.Show("METODO SLR: Cadena sintacticamente correcta"); } else { MessageBox.Show("METODO SLR: Cadena incorrecta"); } sw.Close(); foreach (var s in metodoSlr.pilaErrores) { errores.Append(s + "\n"); } richTextBox2.Text = errores.ToString(); richTextBox1.Text = textB.ToString(); lblCreado.Visible = true; lblCreado.ForeColor = Color.Green; lblCreado.Text = "Archivo de salida " + nombreArchivo + ".out, " + "creado con exito"; #endregion }