public virtual dynamic Solve(Env.Environment env) { dynamic result = new Tree.Null(); foreach (AST line in this.bodyStatements) { result = line.Evaluate(env); } return(result); }
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)); }
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)); }