|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object | +--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
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 java.lang.String |
addStrings(java.lang.String one,
java.lang.String two)
Adds two strings together efficiently |
static java.lang.String |
addStrings(java.lang.String one,
java.lang.String two,
java.lang.String three)
Adds three strings together efficiently |
static boolean |
boolValue(java.lang.Object value)
This method converts the given value into a boolean value |
java.lang.Object |
executeParseTree(java.lang.String location,
java.lang.Object obj,
ParseNode parseNode,
java.lang.Object[] args)
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)
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)
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 |
static Interpreter |
getInterpreter()
This method returns the global interpreter associated with all method calls. |
java.lang.Object |
getValue(java.lang.String field_name,
java.lang.String attrib)
Returns the value of the "tracing" variable - e.g. |
java.lang.Object |
getValueAt(java.lang.Object index,
java.lang.String attrib_name)
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[] args)
The interpreter does not expose any methods to Simkin scripts |
ParseNode |
parse(java.lang.String location,
java.lang.String code)
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)
This method parses a string of Simkin statements, excluding parameters and enclosing braces. |
java.lang.Object |
reflectiveGetValue(java.lang.Object owner,
java.lang.String field_name)
This function attempts to retrieve a public Java field using reflection |
java.lang.Object |
reflectiveMethodCall(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(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(java.lang.String buffer)
this method is called when there is a runtime error and throws a RuntimeException |
static void |
setInterpreter(Interpreter i)
Sets a global interpreter to be used for method calls - you can use this to override the Interpreter with your own derived classes |
void |
setValue(java.lang.String field_name,
java.lang.String attrib,
java.lang.Object value)
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)
Does nothing - this is not a collection |
Methods inherited from class java.lang.Object |
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Constructor Detail |
public Interpreter()
Method Detail |
public void setValue(java.lang.String field_name, java.lang.String attrib, java.lang.Object value) throws java.lang.RuntimeException, java.lang.NoSuchFieldException
Interpreter.tracing=true;
setValue
in interface Executable
simkin.Executable
field_name
- the name of the fieldattrib_name
- the name of the attribute to be set (can be null)value
- the value to be setjava.lang.RuntimeException
- - if there was a problem running the script (such as not having permission to access a field)java.lang.NoSuchFieldException
- - if the field could not be foundpublic java.lang.Object method(java.lang.String method_name, java.lang.Object[] args) throws java.lang.RuntimeException, ParseException, java.lang.NoSuchMethodException
method
in interface Executable
simkin.Executable
method_name
- the name of the methodarguments
- an array of arguments passed to the methodjava.lang.RuntimeException
- - if there was a problem running the script (such as divide by zero)java.lang.NoSuchMethodException
- - if the method could not be foundpublic 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 toString() 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, otherwise toString() is called, and converted to a double
public java.lang.Object getValueAt(java.lang.Object index, java.lang.String attrib_name) throws java.lang.RuntimeException
getValueAt
in interface Executable
simkin.Executable
array_index
- an object whose value indicates the index of the item in the collectionattrib_name
- attribute name (null if no attribute specified)java.lang.RuntimeException
- - if there was a problem running the scriptjava.lang.NoSuchFieldException
- - if the field could not be foundpublic void setValueAt(java.lang.Object index, java.lang.String attrib_name, java.lang.Object value) throws java.lang.RuntimeException
setValueAt
in interface Executable
simkin.Executable
array_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 setjava.lang.RuntimeException
- - if there was a problem running the scriptpublic java.lang.Object getValue(java.lang.String field_name, java.lang.String attrib) throws java.lang.RuntimeException, java.lang.NoSuchFieldException
tracing=Interpreter.tracing;
getValue
in interface Executable
simkin.Executable
field_name
- the name of the fieldattrib_name
- attribute name (null if no attribute specified)java.lang.RuntimeException
- - if there was a problem running the script (such as not having permission to access a field)java.lang.NoSuchFieldException
- - if the field could not be foundpublic java.lang.Object findGlobalVariable(java.lang.String name)
name
- - the name of the global variablepublic 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) 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 codepublic ParseNode parseExternalParams(java.lang.String location, java.util.Vector paramNames, java.lang.String code) 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 codepublic ExecuteResult executeString(java.lang.String location, java.lang.Object obj, java.lang.String code, java.lang.Object[] args) 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 codeParseException
- this is thrown if there is a syntax error in the codejava.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) 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 codeParseException
- this is thrown if there is a syntax error in the codejava.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) 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 codeParseException
- this is thrown if there is a syntax error in the codejava.lang.RuntimeException
- this is thrown if there is an error during the execution of the code (such as method or field not found)public static void runtimeError(java.lang.String buffer) throws java.lang.RuntimeException
public static Interpreter getInterpreter()
public static void setInterpreter(Interpreter i)
the
- Interpeter that will be used to execute methodspublic java.lang.Object reflectiveMethodCall(java.lang.Object owner, java.lang.String method_name, java.lang.Object[] arguments) throws java.lang.RuntimeException, java.lang.NoSuchMethodException
owner
- - 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 typesjava.lang.RuntimeException
- - if the method could not be calledjava.lang.NoSuchMethodException
- - if the method could not be foundpublic void reflectiveSetValue(java.lang.Object owner, java.lang.String field_name, java.lang.Object value) throws java.lang.RuntimeException, java.lang.NoSuchFieldException
owner
- - the object owning the fieldfield_name
- - the name of the fieldvalue
- - the value to assign to the fieldjava.lang.RuntimeException
- - if the field could not be set (e.g. if it was private)java.lang.NoSuchFieldException
- - if the field could not be foundpublic java.lang.Object reflectiveGetValue(java.lang.Object owner, java.lang.String field_name) throws java.lang.RuntimeException, java.lang.NoSuchFieldException
owner
- - the object owning the fieldfield_name
- - the name of the fieldjava.lang.RuntimeException
- - if the field could not be retrieved (e.g. if it was private)java.lang.NoSuchFieldException
- - if the field could not be foundpublic static java.lang.String addStrings(java.lang.String one, java.lang.String two)
public static java.lang.String addStrings(java.lang.String one, java.lang.String two, java.lang.String three)
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |