[Bprocessor-commit] bscript/src/net/sourceforge/bprocessor/model/evaluator Mark.java, NONE, 1.1 En
Status: Pre-Alpha
Brought to you by:
henryml
From: Michael L. <he...@us...> - 2006-09-12 09:27:33
|
Update of /cvsroot/bprocessor/bscript/src/net/sourceforge/bprocessor/model/evaluator In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv4945/src/net/sourceforge/bprocessor/model/evaluator Modified Files: Primitive.java Operation.java Literal.java Variable.java Function.java Added Files: Mark.java Environment.java Invokable.java Call.java Log Message: new scripting capabilities Index: Variable.java =================================================================== RCS file: /cvsroot/bprocessor/bscript/src/net/sourceforge/bprocessor/model/evaluator/Variable.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** Variable.java 11 Sep 2006 22:57:25 -0000 1.2 --- Variable.java 12 Sep 2006 09:27:31 -0000 1.3 *************** *** 27,34 **** /** * @param stack Stack */ ! public void evaluate(Stack stack) { ! stack.push(new Double(87)); } } --- 27,35 ---- /** + * @param env Environment * @param stack Stack */ ! public void evaluate(Environment env, Stack stack) { ! stack.push(env.lookupGlobal(id)); } } --- NEW FILE: Call.java --- //--------------------------------------------------------------------------------- // $Id: Call.java,v 1.1 2006/09/12 09:27:30 henryml Exp $ // // Copyright (c) 2005 The BProcessor Team (http://bprocessor.sourceforge.net) // Released under the Lesser GNU Public License v2.1 //--------------------------------------------------------------------------------- package net.sourceforge.bprocessor.model.evaluator; import java.util.LinkedList; import java.util.List; import java.util.Stack; /** * Call */ public class Call extends Operation { /** name */ private String name; /** * Constructor * @param name String */ public Call(String name) { super(); this.name = name; } /** * @param env Environment * @param stack Stack */ public void evaluate(Environment env, Stack stack) { List arguments = new LinkedList(); Object current = stack.pop(); while (current != Function.mark) { arguments.add(current); current = stack.pop(); } Invokable function = env.lookupFunction(name); if (function != null) { Object result = function.evaluate(env.copy(arguments)); stack.push(result); } else { stack.push(name); } } } --- NEW FILE: Invokable.java --- //--------------------------------------------------------------------------------- // $Id: Invokable.java,v 1.1 2006/09/12 09:27:30 henryml Exp $ // // Copyright (c) 2005 The BProcessor Team (http://bprocessor.sourceforge.net) // Released under the Lesser GNU Public License v2.1 //--------------------------------------------------------------------------------- package net.sourceforge.bprocessor.model.evaluator; /** * Invokable */ public interface Invokable { /** * * @return result */ public Object evaluate(Environment env); } Index: Primitive.java =================================================================== RCS file: /cvsroot/bprocessor/bscript/src/net/sourceforge/bprocessor/model/evaluator/Primitive.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** Primitive.java 11 Sep 2006 22:57:25 -0000 1.2 --- Primitive.java 12 Sep 2006 09:27:30 -0000 1.3 *************** *** 38,44 **** /** * @param stack Stack */ ! public void evaluate(Stack stack) { switch(opcode) { case ADD: { --- 38,45 ---- /** + * @param env Environment * @param stack Stack */ ! public void evaluate(Environment env, Stack stack) { switch(opcode) { case ADD: { Index: Literal.java =================================================================== RCS file: /cvsroot/bprocessor/bscript/src/net/sourceforge/bprocessor/model/evaluator/Literal.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** Literal.java 11 Sep 2006 22:57:25 -0000 1.2 --- Literal.java 12 Sep 2006 09:27:30 -0000 1.3 *************** *** 27,33 **** /** * @param stack Stack */ ! public void evaluate(Stack stack) { stack.push(value); } --- 27,34 ---- /** + * @param env Environment * @param stack Stack */ ! public void evaluate(Environment env, Stack stack) { stack.push(value); } --- NEW FILE: Mark.java --- //--------------------------------------------------------------------------------- // $Id: Mark.java,v 1.1 2006/09/12 09:27:30 henryml Exp $ // // Copyright (c) 2005 The BProcessor Team (http://bprocessor.sourceforge.net) // Released under the Lesser GNU Public License v2.1 //--------------------------------------------------------------------------------- package net.sourceforge.bprocessor.model.evaluator; import java.util.Stack; /** * Mark */ public class Mark extends Operation { /** * Constructor * */ public Mark() { super(); } /** * @param env Environment * @param stack Stack */ public void evaluate(Environment env, Stack stack) { stack.push(Function.mark); } } Index: Operation.java =================================================================== RCS file: /cvsroot/bprocessor/bscript/src/net/sourceforge/bprocessor/model/evaluator/Operation.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** Operation.java 11 Sep 2006 22:57:25 -0000 1.2 --- Operation.java 12 Sep 2006 09:27:30 -0000 1.3 *************** *** 24,29 **** /** * Evaluate * @param stack Stack */ ! public abstract void evaluate(Stack stack); } --- 24,30 ---- /** * Evaluate + * @param env Environment * @param stack Stack */ ! public abstract void evaluate(Environment env, Stack stack); } Index: Function.java =================================================================== RCS file: /cvsroot/bprocessor/bscript/src/net/sourceforge/bprocessor/model/evaluator/Function.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** Function.java 11 Sep 2006 22:57:25 -0000 1.2 --- Function.java 12 Sep 2006 09:27:31 -0000 1.3 *************** *** 16,20 **** * Function */ ! public class Function { /** operations */ private List operations; --- 16,23 ---- * Function */ ! public class Function implements Invokable { ! /** marker */ ! public final static Object mark = new Object(); ! /** operations */ private List operations; *************** *** 40,49 **** * @return result */ ! public Object evaluate() { Iterator iter = operations.iterator(); Stack stack = new Stack(); while (iter.hasNext()) { Operation current = (Operation) iter.next(); ! current.evaluate(stack); } return stack.pop(); --- 43,52 ---- * @return result */ ! public Object evaluate(Environment env) { Iterator iter = operations.iterator(); Stack stack = new Stack(); while (iter.hasNext()) { Operation current = (Operation) iter.next(); ! current.evaluate(env, stack); } return stack.pop(); --- NEW FILE: Environment.java --- //--------------------------------------------------------------------------------- // $Id: Environment.java,v 1.1 2006/09/12 09:27:30 henryml Exp $ // // Copyright (c) 2005 The BProcessor Team (http://bprocessor.sourceforge.net) // Released under the Lesser GNU Public License v2.1 //--------------------------------------------------------------------------------- package net.sourceforge.bprocessor.model.evaluator; import java.util.HashMap; import java.util.List; import net.sourceforge.bprocessor.model.Project; import net.sourceforge.bprocessor.model.Space; import net.sourceforge.bprocessor.model.Vertex; /** * Environment */ public class Environment { /** Functions */ private HashMap functions; /** Globals */ private HashMap globals; /** Locals */ private List locals; /** * Constructor */ public Environment(HashMap functions, HashMap globals, List locals) { super(); this.functions = functions; this.globals = globals; this.locals = locals; } /** * Return a copy with locals replaced * @param locals List * @return Environment */ public Environment copy(List locals) { return new Environment(functions, globals, locals); } /** * @param name String * @return Function */ public Invokable lookupFunction(String name) { return (Invokable) functions.get(name); } /** * @param name String * @return Object */ public Object lookupGlobal(String name) { Object value = globals.get(name); if (value == null) { Space active = Project.getInstance().getActiveSpace(); if (name.charAt(0) == 'v') { String sub = name.substring(1, name.length()); Long id = Long.valueOf(sub); value = (Vertex) active.getVertex(id.longValue()); } } return value; } /** * Return local * @param i Index * @return Object */ public Object get(int i) { return locals.get(i); } } |