# Class: com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.compiler.EExpressionMatcher

Match an IR expression against an IR template.

## Constructor: EExpressionMatcher
- parameter: `template`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.compiler.INode`
- parameter: `initmap`, type: `java.util.Map<java.lang.Integer,java.lang.Object>`

Description: Create an IRE matcher.
parameter: template: the template to match an expression against
parameter: initmap: an optional, initial match map

## Constructor: EExpressionMatcher
- parameter: `template`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.compiler.INode`

Description: Create an IRE matcher.
parameter: template: the template to match an expression against

## Static Field: verbose
Type: `boolean`

## Method: getIRDepthsMap
- return type: `java.util.Map<com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEGeneric,java.lang.Integer>`


## Method: getMatchMap
- return type: `java.util.Map<java.lang.Integer,java.lang.Object>`

Description: Retrieve the match map:
 \- Key= leaf id
 \- Value= matched IRE \(IEgeneric\) for leaves or operator \(OperationType\) for operator groups.
return: 

## Method: isAllowDeepAssociativity
- return type: `boolean`


## Method: isMatch
- parameter: `e`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEGeneric`
- return type: `boolean`


## Method: reset
- parameter: `keepMatches`, type: `boolean`


## Method: reset


## Method: setAllowDeepAssociativity
- parameter: `allowDeepAssociativity`, type: `boolean`

Description: Use an operator's associativity to achieve better matching. For example, matching `V0 * (#1 + $2)` on `r0 * ((r1 + 4) + r2)` could match on:  

```

 V0 = r0
 #1 = 4
 $2 = (r1 + r2)
 
```
  even if \(r1 \+ r2\) * does not* exists in inner expression.
parameter: allowDeepAssociativity: 

## Method: setIRDepthsMap
- parameter: `IRDepthsMap`, type: `java.util.Map<com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEGeneric,java.lang.Integer>`


## Method: toString
- return type: `java.lang.String`


