about summary refs log tree commit diff stats
path: root/example/expression
diff options
context:
space:
mode:
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.py51
-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