Class BinaryExpression
- java.lang.Object
-
- it.unive.lisa.program.cfg.statement.Statement
-
- it.unive.lisa.program.cfg.statement.Expression
-
- it.unive.lisa.program.cfg.statement.NaryExpression
-
- it.unive.lisa.program.cfg.statement.BinaryExpression
-
- All Implemented Interfaces:
ProgramPoint
,CodeElement
,CodeNode<CFG,Statement,Edge>
,Node<CFG,Statement,Edge>
,java.lang.Comparable<Statement>
- Direct Known Subclasses:
Assignment
public abstract class BinaryExpression extends NaryExpression
AnNaryExpression
with exactly two sub-expressions.
-
-
Constructor Summary
Constructors Modifier Constructor Description protected
BinaryExpression(CFG cfg, CodeLocation location, java.lang.String constructName, EvaluationOrder order, Expression left, Expression right)
Builds the untyped expression, happening at the given location in the program.protected
BinaryExpression(CFG cfg, CodeLocation location, java.lang.String constructName, EvaluationOrder order, Type staticType, Expression left, Expression right)
Builds the expression, happening at the given location in the program.protected
BinaryExpression(CFG cfg, CodeLocation location, java.lang.String constructName, Expression left, Expression right)
Builds the untyped expression, happening at the given location in the program.protected
BinaryExpression(CFG cfg, CodeLocation location, java.lang.String constructName, Type staticType, Expression left, Expression right)
Builds the expression, happening at the given location in the program.
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description <A extends AbstractState<A>>
AnalysisState<A>backwardSemanticsAux(InterproceduralAnalysis<A> interprocedural, AnalysisState<A> state, ExpressionSet[] params, StatementStore<A> expressions)
Computes the backward semantics of the expression, after the semantics of all sub-expressions have been computed.<A extends AbstractState<A>>
AnalysisState<A>bwdBinarySemantics(InterproceduralAnalysis<A> interprocedural, AnalysisState<A> state, SymbolicExpression left, SymbolicExpression right, StatementStore<A> expressions)
Computes the backward semantics of the expression, after the semantics of the sub-expressions have been computed.<A extends AbstractState<A>>
AnalysisState<A>forwardSemanticsAux(InterproceduralAnalysis<A> interprocedural, AnalysisState<A> state, ExpressionSet[] params, StatementStore<A> expressions)
Computes the forward semantics of the expression, after the semantics of all sub-expressions have been computed.abstract <A extends AbstractState<A>>
AnalysisState<A>fwdBinarySemantics(InterproceduralAnalysis<A> interprocedural, AnalysisState<A> state, SymbolicExpression left, SymbolicExpression right, StatementStore<A> expressions)
Computes the forward semantics of the expression, after the semantics of the sub-expressions have been computed.Expression
getLeft()
Yields the left-most (first) sub-expression of this expression.Expression
getRight()
Yields the right-most (second) sub-expression of this expression.-
Methods inherited from class it.unive.lisa.program.cfg.statement.NaryExpression
accept, backwardSemantics, equals, forwardSemantics, getConstructName, getOrder, getStatementEvaluatedAfter, getStatementEvaluatedBefore, getSubExpressions, hashCode, setOffset, toString
-
Methods inherited from class it.unive.lisa.program.cfg.statement.Expression
getMetaVariables, getParentStatement, getRootStatement, getStaticType, setParentStatement
-
Methods inherited from class it.unive.lisa.program.cfg.statement.Statement
compareTo, getCFG, getEvaluationPredecessor, getEvaluationSuccessor, getLocation, getOffset, stopsExecution, throwsError
-
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface it.unive.lisa.program.cfg.ProgramPoint
getProgram
-
-
-
-
Constructor Detail
-
BinaryExpression
protected BinaryExpression(CFG cfg, CodeLocation location, java.lang.String constructName, Expression left, Expression right)
Builds the untyped expression, happening at the given location in the program. The static type of this expression isUntyped
. TheEvaluationOrder
isLeftToRightEvaluation
.- Parameters:
cfg
- the cfg that this expression belongs tolocation
- the location where the expression is defined within the programconstructName
- the name of the construct represented by this expressionleft
- the first sub-expression of this expressionright
- the second sub-expression of this expression
-
BinaryExpression
protected BinaryExpression(CFG cfg, CodeLocation location, java.lang.String constructName, Type staticType, Expression left, Expression right)
Builds the expression, happening at the given location in the program. TheEvaluationOrder
isLeftToRightEvaluation
.- Parameters:
cfg
- the cfg that this expression belongs tolocation
- the location where this expression is defined within the programconstructName
- the name of the construct invoked by this expressionstaticType
- the static type of this expressionleft
- the first sub-expression of this expressionright
- the second sub-expression of this expression
-
BinaryExpression
protected BinaryExpression(CFG cfg, CodeLocation location, java.lang.String constructName, EvaluationOrder order, Expression left, Expression right)
Builds the untyped expression, happening at the given location in the program. The static type of this expression isUntyped
.- Parameters:
cfg
- the cfg that this expression belongs tolocation
- the location where the expression is defined within the programconstructName
- the name of the construct represented by this expressionorder
- the evaluation order of the sub-expressionsleft
- the first sub-expression of this expressionright
- the second sub-expression of this expression
-
BinaryExpression
protected BinaryExpression(CFG cfg, CodeLocation location, java.lang.String constructName, EvaluationOrder order, Type staticType, Expression left, Expression right)
Builds the expression, happening at the given location in the program.- Parameters:
cfg
- the cfg that this expression belongs tolocation
- the location where this expression is defined within the programconstructName
- the name of the construct invoked by this expressionorder
- the evaluation order of the sub-expressionsstaticType
- the static type of this expressionleft
- the first sub-expression of this expressionright
- the second sub-expression of this expression
-
-
Method Detail
-
getLeft
public Expression getLeft()
Yields the left-most (first) sub-expression of this expression.- Returns:
- the left-most sub-expression
-
getRight
public Expression getRight()
Yields the right-most (second) sub-expression of this expression.- Returns:
- the right-most sub-expression
-
forwardSemanticsAux
public <A extends AbstractState<A>> AnalysisState<A> forwardSemanticsAux(InterproceduralAnalysis<A> interprocedural, AnalysisState<A> state, ExpressionSet[] params, StatementStore<A> expressions) throws SemanticException
Description copied from class:NaryExpression
Computes the forward semantics of the expression, after the semantics of all sub-expressions have been computed. Meta variables from the sub-expressions will be forgotten after this call returns.- Specified by:
forwardSemanticsAux
in classNaryExpression
- Type Parameters:
A
- the type ofAbstractState
- Parameters:
interprocedural
- the interprocedural analysis of the program to analyzestate
- the state where the expression is to be evaluatedparams
- the symbolic expressions representing the computed values of the sub-expressions of this expressionexpressions
- the cache where analysis states of intermediate expressions are stored and that can be accessed to query for post-states of parameters expressions- Returns:
- the
AnalysisState
representing the abstract result of the execution of this expression - Throws:
SemanticException
- if something goes wrong during the computation
-
fwdBinarySemantics
public abstract <A extends AbstractState<A>> AnalysisState<A> fwdBinarySemantics(InterproceduralAnalysis<A> interprocedural, AnalysisState<A> state, SymbolicExpression left, SymbolicExpression right, StatementStore<A> expressions) throws SemanticException
Computes the forward semantics of the expression, after the semantics of the sub-expressions have been computed. Meta variables from the sub-expressions will be forgotten after this expression returns.- Type Parameters:
A
- the type ofAbstractState
- Parameters:
interprocedural
- the interprocedural analysis of the program to analyzestate
- the state where the expression is to be evaluatedleft
- the symbolic expression representing the computed value of the first sub-expression of this expressionright
- the symbolic expression representing the computed value of the second sub-expression of this expressionexpressions
- the cache where analysis states of intermediate expressions are stored and that can be accessed to query for post-states of parameters expressions- Returns:
- the
AnalysisState
representing the abstract result of the execution of this expression - Throws:
SemanticException
- if something goes wrong during the computation
-
backwardSemanticsAux
public <A extends AbstractState<A>> AnalysisState<A> backwardSemanticsAux(InterproceduralAnalysis<A> interprocedural, AnalysisState<A> state, ExpressionSet[] params, StatementStore<A> expressions) throws SemanticException
Description copied from class:NaryExpression
Computes the backward semantics of the expression, after the semantics of all sub-expressions have been computed. Meta variables from the sub-expressions will be forgotten after this call returns. By default, this method delegates toNaryExpression.forwardSemanticsAux(InterproceduralAnalysis, AnalysisState, ExpressionSet[], StatementStore)
, as it is fine for most atomic statements. One should redefine this method if a statement's semantics is composed of a series of smaller operations.- Overrides:
backwardSemanticsAux
in classNaryExpression
- Type Parameters:
A
- the type ofAbstractState
- Parameters:
interprocedural
- the interprocedural analysis of the program to analyzestate
- the state where the expression is to be evaluatedparams
- the symbolic expressions representing the computed values of the sub-expressions of this expressionexpressions
- the cache where analysis states of intermediate expressions are stored and that can be accessed to query for post-states of parameters expressions- Returns:
- the
AnalysisState
representing the abstract result of the execution of this expression - Throws:
SemanticException
- if something goes wrong during the computation
-
bwdBinarySemantics
public <A extends AbstractState<A>> AnalysisState<A> bwdBinarySemantics(InterproceduralAnalysis<A> interprocedural, AnalysisState<A> state, SymbolicExpression left, SymbolicExpression right, StatementStore<A> expressions) throws SemanticException
Computes the backward semantics of the expression, after the semantics of the sub-expressions have been computed. Meta variables from the sub-expressions will be forgotten after this expression returns. By default, this method delegates tofwdBinarySemantics(InterproceduralAnalysis, AnalysisState, SymbolicExpression, SymbolicExpression, StatementStore)
, as it is fine for most atomic statements. One should redefine this method if a statement's semantics is composed of a series of smaller operations.- Type Parameters:
A
- the type ofAbstractState
- Parameters:
interprocedural
- the interprocedural analysis of the program to analyzestate
- the state where the expression is to be evaluatedleft
- the symbolic expression representing the computed value of the first sub-expression of this expressionright
- the symbolic expression representing the computed value of the second sub-expression of this expressionexpressions
- the cache where analysis states of intermediate expressions are stored and that can be accessed to query for post-states of parameters expressions- Returns:
- the
AnalysisState
representing the abstract result of the execution of this expression - Throws:
SemanticException
- if something goes wrong during the computation
-
-