コード例 #1
0
ファイル: Parser.cs プロジェクト: JiriHamberg/MiniPL
        /*
         *  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;
        }
コード例 #2
0
 void DoTypeChecking(Statements statements)
 {
     foreach (Statement stmt in statements.StatementList) {
         DoTypeChecking (stmt);
     }
 }
コード例 #3
0
 //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);
     }
 }
コード例 #4
0
ファイル: Interpreter.cs プロジェクト: JiriHamberg/MiniPL
 void Interprete(Statements stmts)
 {
     foreach (var stmt in stmts.StatementList) {
         Interprete(stmt);
     }
 }