/* * Actual parsing and builging the ast */ Statements ParseStatements(ISet<Category> follow, ISet<Category> starters) { var ret = new Statements (); try { ret.AddStatement (ParseStatement (Set (Category.Semicolon), starters)); } catch (SyntaxErrorException) { ret.AddStatement((Statement)Recover (statementFirstSet, follow, starters, () => ParseStatement (Set (Category.Semicolon), starters) )); } try { Expect (Category.Semicolon); } catch(SyntaxErrorException) { //missing semicolon, no big deal } //maximum munch while (!follow.Contains(token.Category)) { //statementFirstSet.Contains(token.Category) try { ret.AddStatement (ParseStatement (Set (Category.Semicolon), starters)); } catch (SyntaxErrorException) { ret.AddStatement ((Statement)Recover (statementFirstSet, follow, starters, () => ParseStatement (Set (Category.Semicolon), starters))); } try { Expect (Category.Semicolon); } catch(SyntaxErrorException) { //missing semicolon, no big deal } } return ret; }
void DoTypeChecking(Statements statements) { foreach (Statement stmt in statements.StatementList) { DoTypeChecking (stmt); } }
//we might need multiple statements builders to get all statements //if there are errors, hence this method public void MergeStatements(Statements stmts) { foreach (Statement s in stmts.StatementList) { this.StatementList.Add(s); } }
void Interprete(Statements stmts) { foreach (var stmt in stmts.StatementList) { Interprete(stmt); } }