%%%
%% Jimple Expressions
%%%
module languages/jimple/Expressions
imports
languages/jimple/Lexical
languages/jimple/Names
languages/jimple/Types
exports
sorts Expr
context-free syntax
NewExpr -> Expr
"(" NonVoidType ")" Immediate -> Expr {cons("CastExpr")}
Immediate "instanceof" NonVoidType -> Expr {cons("InstanceOfExpr")}
InvokeExpr -> Expr
Reference -> Expr
Immediate -> Expr
UnopExpr -> Expr
BinopExpr -> Expr
sorts NewExpr ArrayDescriptor FixedArrayDescriptor
context-free syntax
"new" BaseType -> NewExpr {cons("NewExpr")}
"newarray" "(" NonVoidType ")" FixedArrayDescriptor -> NewExpr {cons("NewArrayExpr")}
"newmultiarray" "(" BaseType ")" ArrayDescriptor+ -> NewExpr {cons("NewMultiArrayExpr")}
"[" Immediate? "]" -> ArrayDescriptor {cons("ArrayDescriptor")}
"[" Immediate "]" -> FixedArrayDescriptor {cons("FixedArrayDescriptor")}
sorts Variable
context-free syntax
Reference -> Variable
LocalName -> Variable
sorts InvokeExpr NonStaticInvoke StaticInvoke
context-free syntax
NonStaticInvoke LocalName "." MethodSignature "(" { Immediate ","}* ")" -> InvokeExpr {cons("InvokeExpr")}
"staticinvoke" MethodSignature "(" { Immediate ","}* ")" -> InvokeExpr {cons("StaticInvokeExpr")}
%% invokes an instance initialization method, a private method of this or
%% a superclass method of this.
"specialinvoke" -> NonStaticInvoke {cons("SpecialInvoke")}
%% invokes an instance method of an object
"virtualinvoke" -> NonStaticInvoke {cons("VirtualInvoke")}
%% invokes a method that is implemented by an interface.
"interfaceinvoke" -> NonStaticInvoke {cons("InterfaceInvoke")}
sorts BoolExpr
context-free syntax
UnopExpr -> BoolExpr
BinopExpr -> BoolExpr
sorts UnopExpr
context-free syntax
"lengthof" Immediate -> UnopExpr {cons("LengthExpr")}
"neg" Immediate -> UnopExpr {cons("NegExpr")}
sorts BinopExpr
context-free syntax
Immediate "&" Immediate -> BinopExpr {cons("AndExpr")}
Immediate "|" Immediate -> BinopExpr {cons("OrExpr")}
Immediate "^" Immediate -> BinopExpr {cons("XorExpr")}
Immediate "%" Immediate -> BinopExpr {cons("RemExpr")}
Immediate "cmp" Immediate -> BinopExpr {cons("CmpExpr")}
Immediate "cmpg" Immediate -> BinopExpr {cons("CmpgExpr")}
Immediate "cmpl" Immediate -> BinopExpr {cons("CmplExpr")}
Immediate "==" Immediate -> BinopExpr {cons("EqExpr")}
Immediate "!=" Immediate -> BinopExpr {cons("NeExpr")}
Immediate ">" Immediate -> BinopExpr {cons("GtExpr")}
Immediate ">=" Immediate -> BinopExpr {cons("GeExpr")}
Immediate "<" Immediate -> BinopExpr {cons("LtExpr")}
Immediate "<=" Immediate -> BinopExpr {cons("LeExpr")}
Immediate "<<" Immediate -> BinopExpr {cons("ShlExpr")}
Immediate ">>" Immediate -> BinopExpr {cons("ShrExpr")}
Immediate ">>>" Immediate -> BinopExpr {cons("UshrExpr")}
Immediate "+" Immediate -> BinopExpr {cons("AddExpr")}
Immediate "-" Immediate -> BinopExpr {cons("SubExpr")}
Immediate "*" Immediate -> BinopExpr {cons("MulExpr")}
Immediate "/" Immediate -> BinopExpr {cons("DivExpr")}
sorts MethodSignature FieldSignature
context-free syntax
"<" ClassName ":" Type Name "(" { NonVoidType ","}* ")" ">" -> MethodSignature {cons("MethodSignature")}
"<" ClassName ":" Type Name ">" -> FieldSignature {cons("FieldSignature")}
%%%
%% References
%%%
sorts Reference ArrayRef FieldRef
context-free syntax
ArrayRef -> Reference
FieldRef -> Reference
Identifier FixedArrayDescriptor -> ArrayRef {cons("ArrayRef")}
LocalName "." FieldSignature -> FieldRef {cons("InstanceFieldRef")}
FieldSignature -> FieldRef {cons("StaticFieldRef")}
sorts Immediate
context-free syntax
LocalName -> Immediate
Constant -> Immediate
sorts Constant
context-free syntax
Constant1 -> Constant {cons("Constant")}
FullIntegerConstant -> Constant1 {cons("Integer")}
FullFloatConstant -> Constant1 {cons("Float")}
StringConstant -> Constant1 {cons("String")}
"class" StringConstant -> Constant1 {cons("Class")}
"null" -> Constant1 {cons("Null")}