kmy.jint.tree
Class Context
java.lang.Object
|
+--kmy.jint.tree.Context
- Direct Known Subclasses:
- CompilerContext, PrintContext, StubContext, TraverserContext, TyperContext
- public abstract class Context
- extends java.lang.Object
This class allows one to iterate over the parsing tree. For every
non-abstract class that is subclass of BasicNode, there is a
corresponding eval* method. Every node will call corresponding
method when this node's eval(Context) method is called. So, to
iterate over parsing tree nodes, one can subclass Context
(or one of its subclasses, like StubContext or TraverserContext)
and implement needed functionality in the corresponding eval
method.
This is, to be sure, is more procedural then object-oriented
approach, but I am not religious about OOP. The main advantage
of this approach is that one does not need to modify every
node class to create new kind of parsing tree processing. Also,
every kind of processing code is kept together, not scattered
among numerous node classes; moreover, this logically connected
code has more intimate access to the context state, because it
leaves in context. The downside is, of course, that all the data
inside node classes has to be either public (as I chose) or
publically accessible. Also, if one decides to extend the language
and invent a new kind of node, he has to go and fix all contexts
(this seems fair to me, though).
Methods inherited from class java.lang.Object |
,
clone,
equals,
finalize,
getClass,
hashCode,
notify,
notifyAll,
registerNatives,
toString,
wait,
wait,
wait |
Context
public Context()
evalArrayValue
public abstract java.lang.Object evalArrayValue(ArrayValueNode arrayValueNode)
evalBody
public abstract java.lang.Object evalBody(BodyNode bodyNode)
evalBreak
public abstract java.lang.Object evalBreak(BreakNode breakNode)
evalCall
public abstract java.lang.Object evalCall(CallNode callNode)
evalCase
public abstract java.lang.Object evalCase(CaseNode caseNode)
evalCast
public abstract java.lang.Object evalCast(CastNode castNode)
evalCatch
public abstract java.lang.Object evalCatch(CatchNode catchNode)
evalClass
public abstract java.lang.Object evalClass(ClassNode classNode)
evalCond
public abstract java.lang.Object evalCond(CondNode condNode)
evalConst
public abstract java.lang.Object evalConst(ConstNode constNode)
evalContinue
public abstract java.lang.Object evalContinue(ContinueNode continueNode)
evalDo
public abstract java.lang.Object evalDo(DoNode doNode)
evalExpressionStatement
public abstract java.lang.Object evalExpressionStatement(ExpressionStatementNode esn)
evalFor
public abstract java.lang.Object evalFor(ForNode forNode)
evalFormat
public abstract java.lang.Object evalFormat(FormatNode forNode)
evalIdentifier
public abstract java.lang.Object evalIdentifier(IdentifierNode identifierNode)
evalIf
public abstract java.lang.Object evalIf(IfNode ifNode)
evalImportStatement
public abstract java.lang.Object evalImportStatement(ImportStatementNode importStatement)
evalInfix
public abstract java.lang.Object evalInfix(InfixNode infixNode)
evalLabeled
public abstract java.lang.Object evalLabeled(LabeledNode labeledNode)
evalMember
public abstract java.lang.Object evalMember(MemberNode memberNode)
evalMethod
public abstract java.lang.Object evalMethod(MethodNode methodNode)
evalNew
public abstract java.lang.Object evalNew(NewNode newNode)
evalPackageStatement
public abstract java.lang.Object evalPackageStatement(PackageStatementNode packageStatement)
evalParameter
public abstract java.lang.Object evalParameter(ParameterNode parameterNode)
evalPostfix
public abstract java.lang.Object evalPostfix(PostfixNode postfixNode)
evalPrefix
public abstract java.lang.Object evalPrefix(PrefixNode prefixNode)
evalRegex
public abstract java.lang.Object evalRegex(RegexNode regexNode)
evalReplacer
public abstract java.lang.Object evalReplacer(ReplacerNode replacerNode)
evalReturn
public abstract java.lang.Object evalReturn(ReturnNode returnNode)
evalSwitch
public abstract java.lang.Object evalSwitch(SwitchNode switchNode)
evalSynchronized
public abstract java.lang.Object evalSynchronized(SynchronizedNode synchronizedNode)
evalThrow
public abstract java.lang.Object evalThrow(ThrowNode throwNode)
evalTry
public abstract java.lang.Object evalTry(TryNode tryNode)
evalWhile
public abstract java.lang.Object evalWhile(WhileNode whileNode)