tip.analysis
Interface QuestionAnswer<Q,A>

Type Parameters:
Q - the type of the questions
A - the type of the answers
All Known Implementing Classes:
ConstantPropagationAnalysis.Evaluator, IntervalAnalysis.Evaluator, QuestionAnswerAdapter, SignAnalysis.Evaluator

public interface QuestionAnswer<Q,A>

QuestionAnswer defines an interface for the abstraction of answers based on a question and a Node. The interface is a visitor pattern.

Author:
Johnni Winther, jw@brics.dk

Method Summary
 A caseABinopExp(ABinopExp node, Q question)
          Called by ABinopExp from ABinopExp.apply(QuestionAnswer,Object).
 A caseABlock(ABlock node, Q question)
          Called by ABlock from ABlock.apply(QuestionAnswer,Object).
 A caseABlockStm(ABlockStm node, Q question)
          Called by ABlockStm from ABlockStm.apply(QuestionAnswer,Object).
 A caseABody(ABody node, Q question)
          Called by ABody from ABody.apply(QuestionAnswer,Object).
 A caseADeclStm(ADeclStm node, Q question)
          Called by ADeclStm from ADeclStm.apply(QuestionAnswer,Object).
 A caseADerefExp(ADerefExp node, Q question)
          Called by ADerefExp from ADerefExp.apply(QuestionAnswer,Object).
 A caseADivideBinop(ADivideBinop node, Q question)
          Called by ADivideBinop from ADivideBinop.apply(QuestionAnswer,Object).
 A caseAEqBinop(AEqBinop node, Q question)
          Called by AEqBinop from AEqBinop.apply(QuestionAnswer,Object).
 A caseAFuncDecl(AFuncDecl node, Q question)
          Called by AFuncDecl from AFuncDecl.apply(QuestionAnswer,Object).
 A caseAFunctionCallExp(AFunctionCallExp node, Q question)
          Called by AFunctionCallExp from AFunctionCallExp.apply(QuestionAnswer,Object).
 A caseAFunctionPtrCallExp(AFunctionPtrCallExp node, Q question)
          Called by AFunctionPtrCallExp from AFunctionPtrCallExp.apply(QuestionAnswer,Object).
 A caseAGtBinop(AGtBinop node, Q question)
          Called by AGtBinop from AGtBinop.apply(QuestionAnswer,Object).
 A caseAIfThenElseStm(AIfThenElseStm node, Q question)
          Called by AIfThenElseStm from AIfThenElseStm.apply(QuestionAnswer,Object).
 A caseAIfThenStm(AIfThenStm node, Q question)
          Called by AIfThenStm from AIfThenStm.apply(QuestionAnswer,Object).
 A caseAInputExp(AInputExp node, Q question)
          Called by AInputExp from AInputExp.apply(QuestionAnswer,Object).
 A caseAIntConstExp(AIntConstExp node, Q question)
          Called by AIntConstExp from AIntConstExp.apply(QuestionAnswer,Object).
 A caseALocalDecl(ALocalDecl node, Q question)
          Called by ALocalDecl from ALocalDecl.apply(QuestionAnswer,Object).
 A caseAMallocExp(AMallocExp node, Q question)
          Called by AMallocExp from AMallocExp.apply(QuestionAnswer,Object).
 A caseAMinusBinop(AMinusBinop node, Q question)
          Called by AMinusBinop from AMinusBinop.apply(QuestionAnswer,Object).
 A caseANullExp(ANullExp node, Q question)
          Called by ANullExp from ANullExp.apply(QuestionAnswer,Object).
 A caseAOutputStm(AOutputStm node, Q question)
          Called by AOutputStm from AOutputStm.apply(QuestionAnswer,Object).
 A caseAPlusBinop(APlusBinop node, Q question)
          Called by APlusBinop from APlusBinop.apply(QuestionAnswer,Object).
 A caseAPointerExp(APointerExp node, Q question)
          Called by APointerExp from APointerExp.apply(QuestionAnswer,Object).
 A caseAProgram(AProgram node, Q question)
          Called by AProgram from AProgram.apply(QuestionAnswer,Object).
 A caseAReturnStm(AReturnStm node, Q question)
          Called by AReturnStm from AReturnStm.apply(QuestionAnswer,Object).
 A caseATimesBinop(ATimesBinop node, Q question)
          Called by ATimesBinop from ATimesBinop.apply(QuestionAnswer,Object).
 A caseAVarExp(AVarExp node, Q question)
          Called by AVarExp from AVarExp.apply(QuestionAnswer,Object).
 A caseAWhileStm(AWhileStm node, Q question)
          Called by AWhileStm from AWhileStm.apply(QuestionAnswer,Object).
 A caseEOF(EOF node, Q question)
          Called by EOF from EOF.apply(QuestionAnswer,Object).
 A caseStart(Start node, Q question)
          Called by Start from Start.apply(QuestionAnswer,Object).
 A caseTAnd(TAnd node, Q question)
          Called by TAnd from TAnd.apply(QuestionAnswer,Object).
 A caseTAssign(TAssign node, Q question)
          Called by TAssign from TAssign.apply(QuestionAnswer,Object).
 A caseTComma(TComma node, Q question)
          Called by TComma from TComma.apply(QuestionAnswer,Object).
 A caseTCommentBlock(TCommentBlock node, Q question)
          Called by TCommentBlock from TCommentBlock.apply(QuestionAnswer,Object).
 A caseTCommentSingle(TCommentSingle node, Q question)
          Called by TCommentSingle from TCommentSingle.apply(QuestionAnswer,Object).
 A caseTDiv(TDiv node, Q question)
          Called by TDiv from TDiv.apply(QuestionAnswer,Object).
 A caseTElse(TElse node, Q question)
          Called by TElse from TElse.apply(QuestionAnswer,Object).
 A caseTEq(TEq node, Q question)
          Called by TEq from TEq.apply(QuestionAnswer,Object).
 A caseTGt(TGt node, Q question)
          Called by TGt from TGt.apply(QuestionAnswer,Object).
 A caseTIdentifier(TIdentifier node, Q question)
          Called by TIdentifier from TIdentifier.apply(QuestionAnswer,Object).
 A caseTIf(TIf node, Q question)
          Called by TIf from TIf.apply(QuestionAnswer,Object).
 A caseTInput(TInput node, Q question)
          Called by TInput from TInput.apply(QuestionAnswer,Object).
 A caseTIntegerConst(TIntegerConst node, Q question)
          Called by TIntegerConst from TIntegerConst.apply(QuestionAnswer,Object).
 A caseTLBrace(TLBrace node, Q question)
          Called by TLBrace from TLBrace.apply(QuestionAnswer,Object).
 A caseTLPar(TLPar node, Q question)
          Called by TLPar from TLPar.apply(QuestionAnswer,Object).
 A caseTMalloc(TMalloc node, Q question)
          Called by TMalloc from TMalloc.apply(QuestionAnswer,Object).
 A caseTMinus(TMinus node, Q question)
          Called by TMinus from TMinus.apply(QuestionAnswer,Object).
 A caseTNull(TNull node, Q question)
          Called by TNull from TNull.apply(QuestionAnswer,Object).
 A caseTOutput(TOutput node, Q question)
          Called by TOutput from TOutput.apply(QuestionAnswer,Object).
 A caseTPlus(TPlus node, Q question)
          Called by TPlus from TPlus.apply(QuestionAnswer,Object).
 A caseTRBrace(TRBrace node, Q question)
          Called by TRBrace from TRBrace.apply(QuestionAnswer,Object).
 A caseTReturn(TReturn node, Q question)
          Called by TReturn from TReturn.apply(QuestionAnswer,Object).
 A caseTRPar(TRPar node, Q question)
          Called by TRPar from TRPar.apply(QuestionAnswer,Object).
 A caseTSemicolon(TSemicolon node, Q question)
          Called by TSemicolon from TSemicolon.apply(QuestionAnswer,Object).
 A caseTStar(TStar node, Q question)
          Called by TStar from TStar.apply(QuestionAnswer,Object).
 A caseTVar(TVar node, Q question)
          Called by TVar from TVar.apply(QuestionAnswer,Object).
 A caseTWhile(TWhile node, Q question)
          Called by TWhile from TWhile.apply(QuestionAnswer,Object).
 A caseTWhiteSpace(TWhiteSpace node, Q question)
          Called by TWhiteSpace from TWhiteSpace.apply(QuestionAnswer,Object).
 A caseAAssignPtrStm(AAssignPtrStm node, Q question)
          Called by AAssignPtrStm from AAssignPtrStm.apply(QuestionAnswer,Object).
 A caseAAssignVarStm(AAssignVarStm node, Q question)
          Called by AAssignVarStm from AAssignVarStm.apply(QuestionAnswer,Object).
 

Method Detail

caseStart

A caseStart(Start node,
            Q question)
Called by Start from Start.apply(QuestionAnswer,Object).

Parameters:
node - the calling node
Returns:
the answer to the question

caseAProgram

A caseAProgram(AProgram node,
               Q question)
Called by AProgram from AProgram.apply(QuestionAnswer,Object).

Parameters:
node - the calling node
Returns:
the answer to the question

caseAFuncDecl

A caseAFuncDecl(AFuncDecl node,
                Q question)
Called by AFuncDecl from AFuncDecl.apply(QuestionAnswer,Object).

Parameters:
node - the calling node
Returns:
the answer to the question

caseALocalDecl

A caseALocalDecl(ALocalDecl node,
                 Q question)
Called by ALocalDecl from ALocalDecl.apply(QuestionAnswer,Object).

Parameters:
node - the calling node
Returns:
the answer to the question

caseABody

A caseABody(ABody node,
            Q question)
Called by ABody from ABody.apply(QuestionAnswer,Object).

Parameters:
node - the calling node
Returns:
the answer to the question

caseABlock

A caseABlock(ABlock node,
             Q question)
Called by ABlock from ABlock.apply(QuestionAnswer,Object).

Parameters:
node - the calling node
Returns:
the answer to the question

caseAPlusBinop

A caseAPlusBinop(APlusBinop node,
                 Q question)
Called by APlusBinop from APlusBinop.apply(QuestionAnswer,Object).

Parameters:
node - the calling node
Returns:
the answer to the question

caseAMinusBinop

A caseAMinusBinop(AMinusBinop node,
                  Q question)
Called by AMinusBinop from AMinusBinop.apply(QuestionAnswer,Object).

Parameters:
node - the calling node
Returns:
the answer to the question

caseATimesBinop

A caseATimesBinop(ATimesBinop node,
                  Q question)
Called by ATimesBinop from ATimesBinop.apply(QuestionAnswer,Object).

Parameters:
node - the calling node
Returns:
the answer to the question

caseADivideBinop

A caseADivideBinop(ADivideBinop node,
                   Q question)
Called by ADivideBinop from ADivideBinop.apply(QuestionAnswer,Object).

Parameters:
node - the calling node
Returns:
the answer to the question

caseAEqBinop

A caseAEqBinop(AEqBinop node,
               Q question)
Called by AEqBinop from AEqBinop.apply(QuestionAnswer,Object).

Parameters:
node - the calling node
Returns:
the answer to the question

caseAGtBinop

A caseAGtBinop(AGtBinop node,
               Q question)
Called by AGtBinop from AGtBinop.apply(QuestionAnswer,Object).

Parameters:
node - the calling node
Returns:
the answer to the question

caseABinopExp

A caseABinopExp(ABinopExp node,
                Q question)
Called by ABinopExp from ABinopExp.apply(QuestionAnswer,Object).

Parameters:
node - the calling node
Returns:
the answer to the question

caseAPointerExp

A caseAPointerExp(APointerExp node,
                  Q question)
Called by APointerExp from APointerExp.apply(QuestionAnswer,Object).

Parameters:
node - the calling node
Returns:
the answer to the question

caseADerefExp

A caseADerefExp(ADerefExp node,
                Q question)
Called by ADerefExp from ADerefExp.apply(QuestionAnswer,Object).

Parameters:
node - the calling node
Returns:
the answer to the question

caseAIntConstExp

A caseAIntConstExp(AIntConstExp node,
                   Q question)
Called by AIntConstExp from AIntConstExp.apply(QuestionAnswer,Object).

Parameters:
node - the calling node
Returns:
the answer to the question

caseAFunctionCallExp

A caseAFunctionCallExp(AFunctionCallExp node,
                       Q question)
Called by AFunctionCallExp from AFunctionCallExp.apply(QuestionAnswer,Object).

Parameters:
node - the calling node
Returns:
the answer to the question

caseAFunctionPtrCallExp

A caseAFunctionPtrCallExp(AFunctionPtrCallExp node,
                          Q question)
Called by AFunctionPtrCallExp from AFunctionPtrCallExp.apply(QuestionAnswer,Object).

Parameters:
node - the calling node
Returns:
the answer to the question

caseAVarExp

A caseAVarExp(AVarExp node,
              Q question)
Called by AVarExp from AVarExp.apply(QuestionAnswer,Object).

Parameters:
node - the calling node
Returns:
the answer to the question

caseAInputExp

A caseAInputExp(AInputExp node,
                Q question)
Called by AInputExp from AInputExp.apply(QuestionAnswer,Object).

Parameters:
node - the calling node
Returns:
the answer to the question

caseAMallocExp

A caseAMallocExp(AMallocExp node,
                 Q question)
Called by AMallocExp from AMallocExp.apply(QuestionAnswer,Object).

Parameters:
node - the calling node
Returns:
the answer to the question

caseANullExp

A caseANullExp(ANullExp node,
               Q question)
Called by ANullExp from ANullExp.apply(QuestionAnswer,Object).

Parameters:
node - the calling node
Returns:
the answer to the question

caseAIfThenStm

A caseAIfThenStm(AIfThenStm node,
                 Q question)
Called by AIfThenStm from AIfThenStm.apply(QuestionAnswer,Object).

Parameters:
node - the calling node
Returns:
the answer to the question

caseAIfThenElseStm

A caseAIfThenElseStm(AIfThenElseStm node,
                     Q question)
Called by AIfThenElseStm from AIfThenElseStm.apply(QuestionAnswer,Object).

Parameters:
node - the calling node
Returns:
the answer to the question

caseAWhileStm

A caseAWhileStm(AWhileStm node,
                Q question)
Called by AWhileStm from AWhileStm.apply(QuestionAnswer,Object).

Parameters:
node - the calling node
Returns:
the answer to the question

caseADeclStm

A caseADeclStm(ADeclStm node,
               Q question)
Called by ADeclStm from ADeclStm.apply(QuestionAnswer,Object).

Parameters:
node - the calling node
Returns:
the answer to the question

caseAReturnStm

A caseAReturnStm(AReturnStm node,
                 Q question)
Called by AReturnStm from AReturnStm.apply(QuestionAnswer,Object).

Parameters:
node - the calling node
Returns:
the answer to the question

caseAOutputStm

A caseAOutputStm(AOutputStm node,
                 Q question)
Called by AOutputStm from AOutputStm.apply(QuestionAnswer,Object).

Parameters:
node - the calling node
Returns:
the answer to the question

caseAAssignVarStm

A caseAAssignVarStm(AAssignVarStm node,
                    Q question)
Called by AAssignVarStm from AAssignVarStm.apply(QuestionAnswer,Object).

Parameters:
node - the calling node
Returns:
the answer to the question

caseAAssignPtrStm

A caseAAssignPtrStm(AAssignPtrStm node,
                    Q question)
Called by AAssignPtrStm from AAssignPtrStm.apply(QuestionAnswer,Object).

Parameters:
node - the calling node
Returns:
the answer to the question

caseABlockStm

A caseABlockStm(ABlockStm node,
                Q question)
Called by ABlockStm from ABlockStm.apply(QuestionAnswer,Object).

Parameters:
node - the calling node
Returns:
the answer to the question

caseTWhiteSpace

A caseTWhiteSpace(TWhiteSpace node,
                  Q question)
Called by TWhiteSpace from TWhiteSpace.apply(QuestionAnswer,Object).

Parameters:
node - the calling node
Returns:
the answer to the question

caseTCommentSingle

A caseTCommentSingle(TCommentSingle node,
                     Q question)
Called by TCommentSingle from TCommentSingle.apply(QuestionAnswer,Object).

Parameters:
node - the calling node
Returns:
the answer to the question

caseTCommentBlock

A caseTCommentBlock(TCommentBlock node,
                    Q question)
Called by TCommentBlock from TCommentBlock.apply(QuestionAnswer,Object).

Parameters:
node - the calling node
Returns:
the answer to the question

caseTVar

A caseTVar(TVar node,
           Q question)
Called by TVar from TVar.apply(QuestionAnswer,Object).

Parameters:
node - the calling node
Returns:
the answer to the question

caseTInput

A caseTInput(TInput node,
             Q question)
Called by TInput from TInput.apply(QuestionAnswer,Object).

Parameters:
node - the calling node
Returns:
the answer to the question

caseTOutput

A caseTOutput(TOutput node,
              Q question)
Called by TOutput from TOutput.apply(QuestionAnswer,Object).

Parameters:
node - the calling node
Returns:
the answer to the question

caseTIf

A caseTIf(TIf node,
          Q question)
Called by TIf from TIf.apply(QuestionAnswer,Object).

Parameters:
node - the calling node
Returns:
the answer to the question

caseTElse

A caseTElse(TElse node,
            Q question)
Called by TElse from TElse.apply(QuestionAnswer,Object).

Parameters:
node - the calling node
Returns:
the answer to the question

caseTWhile

A caseTWhile(TWhile node,
             Q question)
Called by TWhile from TWhile.apply(QuestionAnswer,Object).

Parameters:
node - the calling node
Returns:
the answer to the question

caseTReturn

A caseTReturn(TReturn node,
              Q question)
Called by TReturn from TReturn.apply(QuestionAnswer,Object).

Parameters:
node - the calling node
Returns:
the answer to the question

caseTMalloc

A caseTMalloc(TMalloc node,
              Q question)
Called by TMalloc from TMalloc.apply(QuestionAnswer,Object).

Parameters:
node - the calling node
Returns:
the answer to the question

caseTNull

A caseTNull(TNull node,
            Q question)
Called by TNull from TNull.apply(QuestionAnswer,Object).

Parameters:
node - the calling node
Returns:
the answer to the question

caseTLPar

A caseTLPar(TLPar node,
            Q question)
Called by TLPar from TLPar.apply(QuestionAnswer,Object).

Parameters:
node - the calling node
Returns:
the answer to the question

caseTRPar

A caseTRPar(TRPar node,
            Q question)
Called by TRPar from TRPar.apply(QuestionAnswer,Object).

Parameters:
node - the calling node
Returns:
the answer to the question

caseTLBrace

A caseTLBrace(TLBrace node,
              Q question)
Called by TLBrace from TLBrace.apply(QuestionAnswer,Object).

Parameters:
node - the calling node
Returns:
the answer to the question

caseTRBrace

A caseTRBrace(TRBrace node,
              Q question)
Called by TRBrace from TRBrace.apply(QuestionAnswer,Object).

Parameters:
node - the calling node
Returns:
the answer to the question

caseTSemicolon

A caseTSemicolon(TSemicolon node,
                 Q question)
Called by TSemicolon from TSemicolon.apply(QuestionAnswer,Object).

Parameters:
node - the calling node
Returns:
the answer to the question

caseTComma

A caseTComma(TComma node,
             Q question)
Called by TComma from TComma.apply(QuestionAnswer,Object).

Parameters:
node - the calling node
Returns:
the answer to the question

caseTAssign

A caseTAssign(TAssign node,
              Q question)
Called by TAssign from TAssign.apply(QuestionAnswer,Object).

Parameters:
node - the calling node
Returns:
the answer to the question

caseTPlus

A caseTPlus(TPlus node,
            Q question)
Called by TPlus from TPlus.apply(QuestionAnswer,Object).

Parameters:
node - the calling node
Returns:
the answer to the question

caseTMinus

A caseTMinus(TMinus node,
             Q question)
Called by TMinus from TMinus.apply(QuestionAnswer,Object).

Parameters:
node - the calling node
Returns:
the answer to the question

caseTStar

A caseTStar(TStar node,
            Q question)
Called by TStar from TStar.apply(QuestionAnswer,Object).

Parameters:
node - the calling node
Returns:
the answer to the question

caseTDiv

A caseTDiv(TDiv node,
           Q question)
Called by TDiv from TDiv.apply(QuestionAnswer,Object).

Parameters:
node - the calling node
Returns:
the answer to the question

caseTAnd

A caseTAnd(TAnd node,
           Q question)
Called by TAnd from TAnd.apply(QuestionAnswer,Object).

Parameters:
node - the calling node
Returns:
the answer to the question

caseTGt

A caseTGt(TGt node,
          Q question)
Called by TGt from TGt.apply(QuestionAnswer,Object).

Parameters:
node - the calling node
Returns:
the answer to the question

caseTEq

A caseTEq(TEq node,
          Q question)
Called by TEq from TEq.apply(QuestionAnswer,Object).

Parameters:
node - the calling node
Returns:
the answer to the question

caseTIntegerConst

A caseTIntegerConst(TIntegerConst node,
                    Q question)
Called by TIntegerConst from TIntegerConst.apply(QuestionAnswer,Object).

Parameters:
node - the calling node
Returns:
the answer to the question

caseTIdentifier

A caseTIdentifier(TIdentifier node,
                  Q question)
Called by TIdentifier from TIdentifier.apply(QuestionAnswer,Object).

Parameters:
node - the calling node
Returns:
the answer to the question

caseEOF

A caseEOF(EOF node,
          Q question)
Called by EOF from EOF.apply(QuestionAnswer,Object).

Parameters:
node - the calling node
Returns:
the answer to the question