Exemple #1
0
        public virtual dynamic Solve(Env.Environment env)
        {
            dynamic result = new Tree.Null();

            foreach (AST line in this.bodyStatements)
            {
                result = line.Evaluate(env);
            }
            return(result);
        }
Exemple #2
0
        public Assignment ParseAssignment(Token token)
        {
            Token identifier = this.Fetch(TokenType.IDENTIFIER);
            AST   right;

            if (lexer.Peek().Type == TokenType.SEMI_COLON)
            {
                right = new Tree.Null();
            }
            else
            {
                this.Consume(TokenType.IS);
                right = this.Assignee();
            }
            return(new Assignment(identifier.Value, right));
        }
Exemple #3
0
        public AST ParseListReAssignment(Token token)
        {
            this.Consume(TokenType.LEFT_SQUARE_BRACKET);
            Token index = lexer.Next();

            this.Consume(TokenType.RIGHT_SQUARE_BRACKET);
            AST indexer = null;

            if (index.Is(TokenType.IDENTIFIER))
            {
                indexer = new Tree.Variable(index.Value);
            }
            else if (index.Is(TokenType.NUMBER))
            {
                indexer = new Tree.Number(index.Value);
            }
            else
            {
                this.Error("Only variables or numbers can be used to access list items", index);
            }
            AST right = null;

            if (lexer.Peek().Is(TokenType.IS))
            {
                //there is the right part;
                this.Consume(TokenType.IS);
                right = this.Assignee();
            }
            else if (lexer.Peek().Is(TokenType.SEMI_COLON))
            {
                right = new Tree.Null();
            }
            ListModify modifier = new ListModify(token.Value, indexer, right);

            return(new ReAssignment(token.Value, modifier));
        }