/// <summary>
        /// Método genérico de teste para análise sintática
        /// </summary>
        /// <param name="syntax"></param>
        /// <param name="type"></param>
        private void SyntaxTestExecution(SyntaxAnalizer syntax, SyntaxAnalizerType type)
        {
            /*
             * Todos esses inputs são corretos
             * Input:
             *
             * LET A = 4
             * LET B = 5*6
             * 123 LET C = B/A
             * PRINT 2+3, "Olá"
             * INPUT D
             * GOTO 123
             * GOSUB (123)
             * IF (A-B) = C THEN (C-1)
             * LIST A,B,C
             */

            string[] input      = IOUtils.ReadTxtFile(syntaxAnalizerTestFile1);
            bool     validation = false;
            string   feedback   = "";

            //Validação do arquivo com todas as linhas corretas
            int index = 0;

            foreach (string line in input)
            {
                string lline = line;
                syntax.Lexic.File = new string[] { lline };
                feedback          = "";
                validation        = syntax.Analize(ref feedback);

                Assert.IsTrue(validation, "Validação \"" + lline + "\"" + index + " deu negativa, feedback: " + feedback);

                index++;
            }

            input = IOUtils.ReadTxtFile(syntaxAnalizerTestFile2);

            //Validação do arquivo com todas as linhas inválidas
            index = 0;
            foreach (string line in input)
            {
                string lline = line;
                syntax.Lexic.File = new string[] { lline };
                feedback          = "";
                validation        = syntax.Analize(ref feedback);

                Assert.IsTrue(!validation, "Validação " + index + " deu positiva, feedback: " + feedback);

                index++;
            }

            feedback = "";

            input             = IOUtils.ReadTxtFile(syntaxAnalizerTestFile3);
            syntax.Lexic.File = input;
            validation        = syntax.Analize(ref feedback);

            Assert.IsTrue(validation, "Validação " + index + " deu negativa, feedback: " + feedback);
        }
Exemple #2
0
        private void syntaxAnalyzerToolStripMenuItem_Click(object sender, EventArgs e)
        {
            int             index       = tabControl.SelectedIndex;
            FileHandlerForm fileHandler = FileHandlerHash[index];

            Lexic.File = fileHandler.GetTextLines();

            if ((Lexic.File != null) && (Lexic.File.Length > 0))
            {
                if (radioA.Checked)
                {
                    syntaxAnalizerType = SyntaxAnalizerType.ASCENDENT;
                }
                else if (radioRD.Checked)
                {
                    syntaxAnalizerType = SyntaxAnalizerType.RECURSIVE_DESCENDENT;
                }
                else if (radioNRD.Checked)
                {
                    syntaxAnalizerType = SyntaxAnalizerType.NON_RECURSIVE_DESCENDENT;
                }

                //Chama um analisador sintático do tipo setado, por default o tipo é Descendente Recursivo
                Syntax = new SyntaxAnalizer(Lexic, syntaxAnalizerType);

                string feedback = "";
                syntaxAnalyzeSuccess = Syntax.Analize(ref feedback);

                string msg   = "";
                string title = "";
                if (syntaxAnalyzeSuccess)
                {
                    msg   = "Sucesso na Análise Sintática!";
                    title = "Sucesso";
                }
                else
                {
                    msg   = "Erro na Análise Sintática, feedback: \r\n" + feedback;
                    title = "Erro";
                }

                MessageBox.Show(msg, title);
            }
        }
 public SyntaxAnalizer(LexicAnalizer Lexic, SyntaxAnalizerType type)
 {
     this.Lexic = Lexic;
     this.Type  = type;
 }
 public CodeGenerator(string[] File, SyntaxAnalizerType SyntaxType)
 {
     this.File       = File;
     this.SyntaxType = SyntaxType;
 }