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