Exemple #1
0
        /// <summary>
        /// ClassStmt
        ///     CLASS ID LBRACES DeclarationStmt* RBRACES
        /// </summary>
        /// <returns></returns>
        private ClassStmt ParseClassStmt()
        {
            Consume(TokenType.CLASS);
            ClassStmt ret  = new ClassStmt(Consume(TokenType.ID).Literal);
            FuncStmt  fs   = null;
            FuncStmt  fcur = null;
            VarStmt   vs   = null;
            VarStmt   vcur = null;

            Consume(TokenType.LBRACES);
            while (!Check(TokenType.RBRACES))
            {
                DeclarationStmt stmt = ParseDeclOrDefStmt();
                if (stmt is FuncStmt)
                {
                    AppendASTLinkedList(ref fs, ref fcur, (FuncStmt)stmt);
                }
                else
                {
                    AppendASTLinkedList(ref vs, ref vcur, (VarStmt)stmt);
                }
            }
            Consume(TokenType.RBRACES);
            ret.Methods = fs;
            ret.Fields  = vs;
            return(ret);
        }
Exemple #2
0
 protected abstract void MatchDeclarationStmt(DeclarationStmt declarationStmt);