Пример #1
0
        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));
        }
Пример #2
0
 private object EvaluateVariableExpression(VariableExpression expr)
 {
     return(LookupVariable(expr.Name, expr));
 }
Пример #3
0
 public ClassStatement(Token name, VariableExpression superclass, List <FunctionStatement> methods)
 {
     Name       = name;
     Methods    = methods;
     SuperClass = superclass;
 }