コード例 #1
0
        public void reporteAst(string cadena)
        {
            try
            {
                Gramatica_Ascendente gramatica = new Gramatica_Ascendente();
                LanguageData         lenguaje  = new LanguageData(gramatica);
                foreach (var item in lenguaje.Errors)
                {
                    Debug.WriteLine(item);
                }

                Parser        parser = new Parser(lenguaje);
                ParseTree     arbol  = parser.Parse(cadena);
                ParseTreeNode raiz   = arbol.Root;

                generarGrafo(raiz);


                Process cmd = new Process();
                cmd.StartInfo.FileName = "cmd.exe";
                cmd.StartInfo.RedirectStandardInput  = true;
                cmd.StartInfo.RedirectStandardOutput = true;
                cmd.StartInfo.CreateNoWindow         = true;
                cmd.StartInfo.UseShellExecute        = false;
                cmd.Start();
                cmd.StandardInput.WriteLine("cd C:\\compiladores2");
                cmd.StandardInput.WriteLine("dot -Tsvg ast.txt -o ast.svg");
                cmd.Close();
            }
            catch (Exception ex)
            {
                this.debuggerConsole.Text = ex.Message;
            }
        }
コード例 #2
0
        public void analizar(string cadena)
        {
            Gramatica_Ascendente gramatica = new Gramatica_Ascendente();
            LanguageData         lenguaje  = new LanguageData(gramatica);

            foreach (var item in lenguaje.Errors)
            {
                Debug.WriteLine(item);
            }

            Parser        parser = new Parser(lenguaje);
            ParseTree     arbol  = parser.Parse(cadena);
            ParseTreeNode raiz   = arbol.Root;

            if (arbol.ParserMessages.Count > 0)
            {
                int i = 1;
                foreach (var item in arbol.ParserMessages)
                {
                    //Error Lexico
                    if (item.Message.Contains("Invalid character"))
                    {
                        Debug.WriteLine("Error Sintáctico: Linea " + item.Location.Line + " Columna: " + item.Location.Column + "Mensaje: " + item.Message);
                        debuggerConsole.AppendText(i + ") Error Sintáctico: Linea " + item.Location.Line + " Columna: " + item.Location.Column + "Mensaje: " + item.Message + "\n\n");
                        reporte.nuevoError(item.Location.Line, item.Location.Column, "Léxico", item.Message);
                    }
                    else
                    {
                        //Error Sintactico
                        Debug.WriteLine("Error Sintáctico: Linea " + item.Location.Line + " Columna: " + item.Location.Column + " Mensaje: " + item.Message);
                        debuggerConsole.AppendText(i + ") Error Sintáctico: Linea " + item.Location.Line + " Columna: " + item.Location.Column + " Mensaje: " + item.Message + "\n\n");
                        reporte.nuevoError(item.Location.Line, item.Location.Column, "Sintáctico", item.Message);
                    }
                    i++;
                }
            }

            if (raiz == null)
            {
                Debug.WriteLine(arbol.ParserMessages[0].Message);
                debuggerConsole.AppendText(arbol.ParserMessages[0].Message + "\n");
                return;
            }


            Ejecucion ejecucion = new Ejecucion(raiz, console, reporte);

            console.Text         = "";
            debuggerConsole.Text = "";
            ejecucion.iniciar();
            generarGrafo(raiz);
        }