diff options
Diffstat (limited to 'example/expression')
| -rw-r--r-- | example/expression/asm_to_ir.py (renamed from example/expression/manip_expression6.py) | 0 | ||||
| -rw-r--r-- | example/expression/basic_op.py (renamed from example/expression/manip_expression1.py) | 0 | ||||
| -rw-r--r-- | example/expression/basic_simplification.py (renamed from example/expression/manip_expression3.py) | 0 | ||||
| -rw-r--r-- | example/expression/expr_grapher.py (renamed from example/expression/manip_expression7.py) | 0 | ||||
| -rw-r--r-- | example/expression/get_read_write.py (renamed from example/expression/manip_expression2.py) | 0 | ||||
| -rw-r--r-- | example/expression/graph_dataflow.py (renamed from example/expression/manip_expression4.py) | 0 | ||||
| -rw-r--r-- | example/expression/simplification_add.py | 51 | ||||
| -rw-r--r-- | example/expression/simplification_tools.py (renamed from example/expression/manip_expression5.py) | 0 |
8 files changed, 51 insertions, 0 deletions
diff --git a/example/expression/manip_expression6.py b/example/expression/asm_to_ir.py index b5fe0ec5..b5fe0ec5 100644 --- a/example/expression/manip_expression6.py +++ b/example/expression/asm_to_ir.py diff --git a/example/expression/manip_expression1.py b/example/expression/basic_op.py index a9ed00e3..a9ed00e3 100644 --- a/example/expression/manip_expression1.py +++ b/example/expression/basic_op.py diff --git a/example/expression/manip_expression3.py b/example/expression/basic_simplification.py index 27c86096..27c86096 100644 --- a/example/expression/manip_expression3.py +++ b/example/expression/basic_simplification.py diff --git a/example/expression/manip_expression7.py b/example/expression/expr_grapher.py index d1cbb73b..d1cbb73b 100644 --- a/example/expression/manip_expression7.py +++ b/example/expression/expr_grapher.py diff --git a/example/expression/manip_expression2.py b/example/expression/get_read_write.py index faa3f9df..faa3f9df 100644 --- a/example/expression/manip_expression2.py +++ b/example/expression/get_read_write.py diff --git a/example/expression/manip_expression4.py b/example/expression/graph_dataflow.py index bbf721f7..bbf721f7 100644 --- a/example/expression/manip_expression4.py +++ b/example/expression/graph_dataflow.py diff --git a/example/expression/simplification_add.py b/example/expression/simplification_add.py new file mode 100644 index 00000000..008e094b --- /dev/null +++ b/example/expression/simplification_add.py @@ -0,0 +1,51 @@ +import miasm2.expression.expression as m2_expr +from miasm2.expression.simplifications import expr_simp +from pdb import pm +import os + +filename = os.environ.get('PYTHONSTARTUP') +if filename and os.path.isfile(filename): + execfile(filename) + +print """ +Expression simplification demo: Adding a simplification: +a + a + a == a * 3 + +More detailed examples can be found in miasm2/expression/simplification*. +""" + +# Define the simplification method +## @expr_simp is the current expression simplifier instance +## (for recursive simplifications) +## @expr is the expression to (perhaps) simplify +def simp_add_mul(expr_simp, expr): + "Naive Simplification: a + a + a == a * 3" + + # Match the expected form + ## isinstance(expr, m2_expr.ExprOp) is not needed: simplifications are + ## attached to expression types + if expr.op == "+" and \ + len(expr.args) == 3 and \ + expr.args.count(expr.args[0]) == len(expr.args): + + # Effective simplification + return m2_expr.ExprOp("*", expr.args[0], + m2_expr.ExprInt_from(expr.args[0], 3)) + else: + # Do not simplify + return expr + +a = m2_expr.ExprId('a') +base_expr = a + a + a +print "Without adding the simplification:" +print "\t%s = %s" % (base_expr, expr_simp(base_expr)) + +# Enable pass +expr_simp.enable_passes({m2_expr.ExprOp: [simp_add_mul]}) + +print "After adding the simplification:" +print "\t%s = %s" % (base_expr, expr_simp(base_expr)) + +# Automatic fail +assert(expr_simp(base_expr) == m2_expr.ExprOp("*", a, + m2_expr.ExprInt_from(a, 3))) diff --git a/example/expression/manip_expression5.py b/example/expression/simplification_tools.py index ed147c04..ed147c04 100644 --- a/example/expression/manip_expression5.py +++ b/example/expression/simplification_tools.py |