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).


Constructor Summary
Context()
           
 
Method Summary
abstract  java.lang.Object evalArrayValue(ArrayValueNode arrayValueNode)
           
abstract  java.lang.Object evalBody(BodyNode bodyNode)
           
abstract  java.lang.Object evalBreak(BreakNode breakNode)
           
abstract  java.lang.Object evalCall(CallNode callNode)
           
abstract  java.lang.Object evalCase(CaseNode caseNode)
           
abstract  java.lang.Object evalCast(CastNode castNode)
           
abstract  java.lang.Object evalCatch(CatchNode catchNode)
           
abstract  java.lang.Object evalClass(ClassNode classNode)
           
abstract  java.lang.Object evalCond(CondNode condNode)
           
abstract  java.lang.Object evalConst(ConstNode constNode)
           
abstract  java.lang.Object evalContinue(ContinueNode continueNode)
           
abstract  java.lang.Object evalDo(DoNode doNode)
           
abstract  java.lang.Object evalExpressionStatement(ExpressionStatementNode esn)
           
abstract  java.lang.Object evalFor(ForNode forNode)
           
abstract  java.lang.Object evalFormat(FormatNode forNode)
           
abstract  java.lang.Object evalIdentifier(IdentifierNode identifierNode)
           
abstract  java.lang.Object evalIf(IfNode ifNode)
           
abstract  java.lang.Object evalImportStatement(ImportStatementNode importStatement)
           
abstract  java.lang.Object evalInfix(InfixNode infixNode)
           
abstract  java.lang.Object evalLabeled(LabeledNode labeledNode)
           
abstract  java.lang.Object evalMember(MemberNode memberNode)
           
abstract  java.lang.Object evalMethod(MethodNode methodNode)
           
abstract  java.lang.Object evalNew(NewNode newNode)
           
abstract  java.lang.Object evalPackageStatement(PackageStatementNode packageStatement)
           
abstract  java.lang.Object evalParameter(ParameterNode parameterNode)
           
abstract  java.lang.Object evalPostfix(PostfixNode postfixNode)
           
abstract  java.lang.Object evalPrefix(PrefixNode prefixNode)
           
abstract  java.lang.Object evalRegex(RegexNode regexNode)
           
abstract  java.lang.Object evalReplacer(ReplacerNode replacerNode)
           
abstract  java.lang.Object evalReturn(ReturnNode returnNode)
           
abstract  java.lang.Object evalSwitch(SwitchNode switchNode)
           
abstract  java.lang.Object evalSynchronized(SynchronizedNode synchronizedNode)
           
abstract  java.lang.Object evalThrow(ThrowNode throwNode)
           
abstract  java.lang.Object evalTry(TryNode tryNode)
           
abstract  java.lang.Object evalWhile(WhileNode whileNode)
           
 
Methods inherited from class java.lang.Object
, clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
 

Constructor Detail

Context

public Context()
Method Detail

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)