private CodeGenInitialize CodeGenStart(List <CodeGenInitialize.Tokens> tokens, SemanticsInitializer semantics) { CodeGenInitialize gen = null; try { gen = new CodeGenInitialize(tokens, semantics); } catch (Exception e) { MessageBox.Show(e.Message); } return(gen); }
private void LexButton_Click(object sender, EventArgs e) { LexGrid.Rows.Clear(); DataLexicalError.Rows.Clear(); DataSyntaxError.Rows.Clear(); Grid_Syntax.Rows.Clear(); Grid_Dec.Rows.Clear(); Grid_Array.Rows.Clear(); Output.Text = ""; if (Code.Text != "") { //LEXICAL ANALYZER Output.Text = "[1] Starting Lexical Analyzer\n"; LexicalAnalyzer lex = new LexicalAnalyzer(); LexicalInitializer Lexical = new LexicalInitializer(); string txt = Code.Text; lex = Lexical.Start(txt, lex); //DISPLAY TOKENS DisplayTokens(lex); if (syntax_mode.Checked) { if (lex.invalid == 0 && lex.token.Count != 0) { //SYNTAX ANALYZER SyntaxInitializer Syntax_Analyzer = new SyntaxInitializer(); SemanticsInitializer semantics = new SemanticsInitializer(); Output.Text += "\n[2] Starting Syntax Analyzer\n"; if (semantics_mode.Checked) { Output.Text += "[3] Starting Static Semantics Analyzer\n"; } string syntax_result = Syntax_Analyzer.Start(tokenDump(lex.token)) + "\n"; int c = 0; Grid_Syntax.Rows.Clear(); foreach (var item in Syntax_Analyzer.SET) { Grid_Syntax.Rows.Add((c + 1).ToString(), Syntax_Analyzer.PRODUCTION[c].ToString(), "->", Syntax_Analyzer.SET[c].ToString()); c++; } //MessageBox.Show(Syntax_Analyzer.production); //MessageBox.Show(Syntax_Analyzer.recursiveprod); if (syntax_result != "Syntax Analyzer Succeeded...\n") { int errornum = 1; DataSyntaxError.Rows.Clear(); //if(Syntax_Analyzer.PRODUCTION[c-1] == "Prod_logop1") //{ // DataSyntaxError.Rows.Add(errornum, Syntax_Analyzer.errors.getLines(), Syntax_Analyzer.errors.getColumn(), "Expected: \"!\", \"id\", \"boollit\", \"intlit\", \"doublelit\", \"charlit\", \"stringlit\"."); //} //else if (Syntax_Analyzer.PRODUCTION[c - 1] == "Prod_option" && Syntax_Analyzer.errors.getErrorMessage() == "Expected: Var, Clear, id, Int, Char, Boolean, Double, String, ++, --, Object, Until, Do, For, Array, If, Read, Say, Option, ., Stop, End.") //{ // DataSyntaxError.Rows.Add(errornum, Syntax_Analyzer.errors.getLines(), Syntax_Analyzer.errors.getColumn(), "Expected: \"intlit\", \"charlit\", \"stringlit\"."); //} //else if (Syntax_Analyzer.errors.getColumn() == 1) { Syntax_Analyzer.errors.setLines(Syntax_Analyzer.errors.getLines() - 1); } DataSyntaxError.Rows.Add(errornum, Syntax_Analyzer.errors.getLines(), Syntax_Analyzer.errors.getColumn(), Syntax_Analyzer.errors.getErrorMessage()); errornum++; } else { Output.Text += syntax_result; } if (semantics_mode.Checked) { semantics = SemanticsStart(tokenDumps(lex.token)); string semantics_result = semantics.Start(); foreach (var item in semantics.Identifiers) { Grid_Dec.Rows.Add(item.getLines(), item.getId(), item.getDtype(), item.getValue(), item.getScope()); } foreach (var item in semantics.Indexes) { Grid_Array.Rows.Add(item.getId(), item.getDatatype(), item.getValue(), item.getIndex_1(), item.getIndex_2()); } if (semantics.error != "" || syntax_result != "Syntax Analyzer Succeeded...\n") { Output.Text += semantics.error + semantics_result; } else { Output.Text += "Static Semantics Analyzer Succeeded..."; MessageBox.Show("Code compiled with no error.", "Success", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); CodeGenInitialize generate = new CodeGenInitialize(); generate = CodeGenStart(TokenDump(lex.token), semantics); generate.Start(); } } } } } }