|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object | +--simkin.ExecutableRoot | +--simkin.Interpreter
This class represents the Simkin interpreter. The interpreter can load, parse and interpret Simkin code.
The Interpreter maintains a list of global variables. This maps names to objects, which are available to all Simkin scripts.
The interpreter itself is a global object with the name "Interpreter".
The Interpreter implements the Executable
interface, supports the single field "tracing" which enables/disables tracing of method calls
New from Simkin 1.22: callers are now responsible for creating Interpreter instances. There are no global interpreter variables in the class. Please see the document entitled "Creating Interpreters and Contexts" for more details.
Field Summary | |
static Null |
g_Break
special marker object for break |
static java.lang.Boolean |
g_False
false object |
static Null |
g_null
the null object |
static java.lang.Boolean |
g_True
true object |
static java.lang.Integer |
g_Zero
zero object |
Constructor Summary | |
Interpreter()
Default constructor - adds a global variable pointing to this interpreter |
Method Summary | |
void |
addGlobalVariable(java.lang.String name,
java.lang.Object r)
Adds a global variable to the current list |
static boolean |
boolValue(java.lang.Object value)
This method converts the given value into a boolean value |
boolean |
checkThrowException(ExecutableContext ctxt,
java.lang.Exception e,
java.lang.String desc)
Alerts the current statement stepper (if there is one) that an exception has occurred |
java.lang.Object |
evaluateExpression(java.lang.String location,
java.lang.Object obj,
java.lang.String expression,
java.util.Hashtable vars,
ExecutableContext ctxt)
this function parses and evaluates an expression within the given context |
java.lang.Object |
executeParseTree(java.lang.String location,
java.lang.Object obj,
ParseNode parseNode,
java.lang.Object[] args,
ExecutableContext ctxt)
This method executes a piece of Simkin code from a parse tree. |
ExecuteResult |
executeString(java.lang.String location,
java.lang.Object obj,
java.lang.String code,
java.lang.Object[] args,
ExecutableContext ctxt)
This method executes a piece of Simkin code within a string |
ExecuteResult |
executeStringExternalParams(java.lang.String location,
java.lang.Object obj,
java.util.Vector paramNames,
java.lang.String code,
java.lang.Object[] args,
ExecutableContext ctxt)
This method executes a piece of Simkin code within a string, it assumes that the parameters have been defined outside the statement block. |
java.lang.Object |
findGlobalVariable(java.lang.String name)
looks for the given global variable. |
static double |
floatValue(java.lang.Object value)
This method converts the given value into a double value |
java.util.Hashtable |
getGlobalVariables()
This method returns the current global variables for this instance of the Interpreter |
boolean |
getReflectionEnabled()
Returns the value of the reflection enabled flag. |
java.lang.Object |
getValue(java.lang.String field_name,
java.lang.String attrib,
ExecutableContext ctxt)
Returns the value of the "tracing" variable - e.g. |
java.lang.Object |
getValueAt(java.lang.Object index,
java.lang.String attrib_name,
ExecutableContext ctxt)
Returns null - this is not a collection |
static int |
intValue(java.lang.Object value)
This method converts the given value into an integer value |
java.lang.Object |
method(java.lang.String method_name,
java.lang.Object[] arguments,
ExecutableContext ctxt)
The following methods are supported directly by this class: |
ParseNode |
parse(java.lang.String location,
java.lang.String code,
ExecutableContext ctxt)
This method parses a string full of Simkin code and returns the parse tree. |
ParseNode |
parseExternalParams(java.lang.String location,
java.util.Vector paramNames,
java.lang.String code,
ExecutableContext ctxt)
This method parses a string of Simkin statements, excluding parameters and enclosing braces. |
java.lang.Object |
reflectiveGetValue(ExecutableContext ctxt,
java.lang.Object owner,
java.lang.String field_name)
This function attempts to retrieve a public Java field using reflection |
java.lang.Object |
reflectiveMethodCall(ExecutableContext ctxt,
java.lang.Object owner,
java.lang.String method_name,
java.lang.Object[] arguments)
This function attempts to make a public method call on a Java object by using reflection |
void |
reflectiveSetValue(ExecutableContext ctxt,
java.lang.Object owner,
java.lang.String field_name,
java.lang.Object value)
This function attempts to set a public Java field using reflection |
void |
removeGlobalVariable(java.lang.String name)
Removes a global variable from the current list |
static void |
runtimeError(ExecutableContext ctxt,
java.lang.String buffer)
this method is called when there is a runtime error and throws a RuntimeException |
void |
setReflectionEnabled(boolean flag)
Sets the value of the reflection enabled flag. |
void |
setStatementStepper(StatementStepper stepper)
this method sets an object to be called each time a statement is executed. |
void |
setTraceCallback(TraceCallback cb)
this method sets an object to receive trace messages. |
void |
setValue(java.lang.String field_name,
java.lang.String attrib,
java.lang.Object value,
ExecutableContext ctxt)
Used to set the "tracing" variable - for example in Simkin: |
void |
setValueAt(java.lang.Object index,
java.lang.String attrib_name,
java.lang.Object value,
ExecutableContext ctxt)
Does nothing - this is not a collection |
void |
trace(java.lang.Exception e)
Sends the text of an exception to the tracer |
void |
trace(java.lang.String s)
this method outputs a message to the trace - either the global class Tracer, or the current Trace callback |
Methods inherited from class simkin.ExecutableRoot |
createIterator, createIterator, getAttributes, getInstanceVariables, getSource |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
public static final Null g_null
public static final java.lang.Boolean g_True
public static final java.lang.Boolean g_False
public static final java.lang.Integer g_Zero
public static final Null g_Break
Constructor Detail |
public Interpreter()
Method Detail |
public boolean getReflectionEnabled()
public void setReflectionEnabled(boolean flag)
flag
- true or falsepublic void setValue(java.lang.String field_name, java.lang.String attrib, java.lang.Object value, ExecutableContext ctxt) throws java.lang.RuntimeException, FieldNotSupportedException
Interpreter.tracing=true;
setValue
in interface Executable
setValue
in class ExecutableRoot
field_name
- the name of the fieldattrib
- the name of the attribute to be set (can be null)value
- the value to be setctxt
- the context the function is called within
java.lang.RuntimeException
- - if there was a problem running the script (such as not having permission to access a field)
FieldNotSupportedException
- - if the field could not be foundpublic java.lang.Object method(java.lang.String method_name, java.lang.Object[] arguments, ExecutableContext ctxt) throws ParseException, java.lang.RuntimeException, MethodNotSupportedException
breakpoint - forces a breakpoint to be signalled to an attached debugger
method
in interface Executable
method
in class ExecutableRoot
ParseException
java.lang.RuntimeException
MethodNotSupportedException
public boolean checkThrowException(ExecutableContext ctxt, java.lang.Exception e, java.lang.String desc)
ctxt
- the current ExecutableContexte
- the exception to throwdesc
- the exception description without location information
public static boolean boolValue(java.lang.Object value)
If the object is an instance of Boolean, the boolean value is returned, otherwise toString() is called, and compared with "true"
public static int intValue(java.lang.Object value)
If the object is an instance of Integer, the integer value is returned, otherwise toFloat() is called, and converted to an integer
public static double floatValue(java.lang.Object value)
If the object is an instance of Double, the integer value is returned. If the object is a boolean, true maps to 1.0f and false to 0.0f, otherwise toString() is called, and converted to a double
public java.lang.Object getValueAt(java.lang.Object index, java.lang.String attrib_name, ExecutableContext ctxt) throws java.lang.RuntimeException
getValueAt
in interface Executable
getValueAt
in class ExecutableRoot
index
- an object whose value indicates the index of the item in the collectionattrib_name
- attribute name (null if no attribute specified)ctxt
- the context the function is called within
java.lang.RuntimeException
- - if there was a problem running the scriptpublic void setValueAt(java.lang.Object index, java.lang.String attrib_name, java.lang.Object value, ExecutableContext ctxt) throws java.lang.RuntimeException
setValueAt
in interface Executable
setValueAt
in class ExecutableRoot
index
- an object whose value indicates the index of the item in the collectionattrib_name
- the name of the attribute to be set (can be null)value
- the value to be setctxt
- the context the function is called within
java.lang.RuntimeException
- - if there was a problem running the scriptpublic java.lang.Object getValue(java.lang.String field_name, java.lang.String attrib, ExecutableContext ctxt) throws java.lang.RuntimeException, FieldNotSupportedException
tracing=Interpreter.tracing;
getValue
in interface Executable
getValue
in class ExecutableRoot
field_name
- the name of the fieldattrib
- attribute name (null if no attribute specified)ctxt
- the context the function is called within
java.lang.RuntimeException
- - if there was a problem running the script (such as not having permission to access a field)
FieldNotSupportedException
- - if the field could not be foundpublic java.lang.Object findGlobalVariable(java.lang.String name)
name
- - the name of the global variable
public void addGlobalVariable(java.lang.String name, java.lang.Object r)
name
- - the name of the global variable, if one already exists it is replacedr
- - the object to be added to the listpublic void removeGlobalVariable(java.lang.String name)
name
- - the name of the global variable to be removedpublic ParseNode parse(java.lang.String location, java.lang.String code, ExecutableContext ctxt) throws ParseException
For example the following string could be passed:
(a,b){ a=b+1; return a; }
location
- used to help identify the code in error messagescode
- a string containing the Simkin codectxt
- the owning ExecutableContext
ParseException
public ParseNode parseExternalParams(java.lang.String location, java.util.Vector paramNames, java.lang.String code, ExecutableContext ctxt) throws ParseException
For example the following string could be passed (note the absence of enclosing braces around the statement list):
a=b+1; return a;
location
- used to help identify the code in error messagesparamNames
- a vector of names for the parameterscode
- a string containing the Simkin codectxt
- the owning ExecutableContext
ParseException
public ExecuteResult executeString(java.lang.String location, java.lang.Object obj, java.lang.String code, java.lang.Object[] args, ExecutableContext ctxt) throws java.lang.RuntimeException, ParseException
For example the following string could be passed:
(a,b){ a=b+1; return a; }
location
- a name used to identify the code in error messagesobj
- the object within whose context the code will executecode
- a string containing some Simkin codeargs
- and array of RValue arguments to the codectxt
- the owning ExecutableContext
ParseException
- this is thrown if there is a syntax error in the code
java.lang.RuntimeException
- this is thrown if there is an error during the execution of the code (such as method or field not found)public ExecuteResult executeStringExternalParams(java.lang.String location, java.lang.Object obj, java.util.Vector paramNames, java.lang.String code, java.lang.Object[] args, ExecutableContext ctxt) throws java.lang.RuntimeException, ParseException
For example the following string could be passed (note the absence of enclosing braces around the statement list):
a=b+1; return a;
location
- a name used to identify the code in error messagesobj
- the object within whose context the code will executeparamNames
- a vector of names for the parameterscode
- a string containing some Simkin codeargs
- and array of RValue arguments to the codectxt
- the owning ExecutableContext
ParseException
- this is thrown if there is a syntax error in the code
java.lang.RuntimeException
- this is thrown if there is an error during the execution of the code (such as method or field not found)public java.lang.Object executeParseTree(java.lang.String location, java.lang.Object obj, ParseNode parseNode, java.lang.Object[] args, ExecutableContext ctxt) throws java.lang.RuntimeException, ParseException
You can call this with a parse tree produced by parse
, parseExternalParams
,executeString
or executeStringExternalParams
. This can be useful for caching parse trees to improve performance.
location
- a name used to identify the code in error messagesobj
- the object within whose context the code will executeparseNode
- a pre-parsed tree of Simkin codeargs
- and array of RValue arguments to the codectxt
- the owning ExecutableContext
ParseException
- this is thrown if there is a syntax error in the code
java.lang.RuntimeException
- this is thrown if there is an error during the execution of the code (such as method or field not found)public java.lang.Object evaluateExpression(java.lang.String location, java.lang.Object obj, java.lang.String expression, java.util.Hashtable vars, ExecutableContext ctxt) throws java.lang.RuntimeException, ParseException
location
- - a textual description of the location of the expression (this appears in error messages)obj
- - the executable object which "owns" the expressionvars
- - a table of local variables defined for the expressionexpression
- - a single Simkin expression which must begin with "=" for example "=a+b"
ParseException
- - if a syntax error is encountered
java.lang.RuntimeException
- - if an error occurs while the expression is evaluatedpublic static void runtimeError(ExecutableContext ctxt, java.lang.String buffer) throws java.lang.RuntimeException
ctxt
- the owning ExecutableContextbuffer
- the text of the error
java.lang.RuntimeException
public void trace(java.lang.String s)
s
- the message to be sent to the tracerpublic void trace(java.lang.Exception e)
e
- the exception to be sent to the tracerpublic void setTraceCallback(TraceCallback cb)
cb
- the new tracer to use for trace commands (or null to fall back to Tracer)public void setStatementStepper(StatementStepper stepper)
stepper
- the new statement stepperpublic java.lang.Object reflectiveMethodCall(ExecutableContext ctxt, java.lang.Object owner, java.lang.String method_name, java.lang.Object[] arguments) throws java.lang.RuntimeException, MethodNotSupportedException
ctxt
- the owning ExecutableContextowner
- - the object to call a method onmethod_name
- - the name of the method to callarguments
- - the method arguments - types Integer, Double, Boolean and Character are converted to their primitive types
java.lang.RuntimeException
- - if the method could not be called
MethodNotSupportedException
- - if the method could not be foundpublic void reflectiveSetValue(ExecutableContext ctxt, java.lang.Object owner, java.lang.String field_name, java.lang.Object value) throws java.lang.RuntimeException, FieldNotSupportedException
ctxt
- the owning ExecutableContextowner
- - the object owning the fieldfield_name
- - the name of the fieldvalue
- - the value to assign to the field
java.lang.RuntimeException
- - if the field could not be set (e.g. if it was private)
FieldNotSupportedException
- - if the field could not be foundpublic java.lang.Object reflectiveGetValue(ExecutableContext ctxt, java.lang.Object owner, java.lang.String field_name) throws java.lang.RuntimeException, FieldNotSupportedException
ctxt
- the owning ExecutableContextowner
- - the object owning the fieldfield_name
- - the name of the field
java.lang.RuntimeException
- - if the field could not be retrieved (e.g. if it was private)
FieldNotSupportedException
- - if the field could not be foundpublic java.util.Hashtable getGlobalVariables()
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |