private SyntaxNode ParseClassDeclaration() { Consume(TokenType.Identifier, "Expect class name."); Token name = Previous(); VariableExpression superclass = null; if (Match(TokenType.Less)) { Consume(TokenType.Identifier, "Expect superclass name"); superclass = new VariableExpression(Previous()); } Consume(TokenType.LeftBrace, "Expect '{' before class body."); List <FunctionStatement> methods = new List <FunctionStatement>(); while (!Check(TokenType.RightBrace) && !IsAtEnd()) { methods.Add((FunctionStatement)ParseFunctionDeclaration("method")); } Consume(TokenType.RightBrace, "Expect '}' after class Body."); return(new ClassStatement(name, superclass, methods)); }
private object EvaluateVariableExpression(VariableExpression expr) { return(LookupVariable(expr.Name, expr)); }
public ClassStatement(Token name, VariableExpression superclass, List <FunctionStatement> methods) { Name = name; Methods = methods; SuperClass = superclass; }