/// <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); }
protected abstract void MatchDeclarationStmt(DeclarationStmt declarationStmt);