From a5af805023b86554da0461e52e15da9ccf541832 Mon Sep 17 00:00:00 2001 From: Merlin Baviere <merlin.baviere@student-cs.fr> Date: Fri, 28 Mar 2025 14:03:33 +0100 Subject: [PATCH] =?UTF-8?q?TP2=20:=20unique=20question=20:=20=1B[200~?= =?UTF-8?q?=C3=80=20quoi?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../constant_propagation.cpython-313.pyc | Bin 0 -> 8508 bytes Pystan/config/constant_propagation.py | 67 ++++++++++++++---- Pystan/config/example_iteration.py | 2 + 3 files changed, 55 insertions(+), 14 deletions(-) create mode 100644 Pystan/config/__pycache__/constant_propagation.cpython-313.pyc diff --git a/Pystan/config/__pycache__/constant_propagation.cpython-313.pyc b/Pystan/config/__pycache__/constant_propagation.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..51feff5f9764833e4c0f2ab14143279abe81d367 GIT binary patch literal 8508 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 DggT9T literal 0 HcmV?d00001 diff --git a/Pystan/config/constant_propagation.py b/Pystan/config/constant_propagation.py index a530c34..37cb8ce 100644 --- a/Pystan/config/constant_propagation.py +++ b/Pystan/config/constant_propagation.py @@ -85,23 +85,62 @@ class Constant_propagation(Transfer[state]): def __init__(self,instr): self.variables = variables_of_instr(instr) def bottom(self) -> state: - ... + return None def init_state(self) -> state: - ... - def join(self,s1:state,s2:state) -> state: - ... + return {var: abstract_value(None) for var in self.variables} + def join(self, s1: state, s2: state) -> state: + if s1 is None: + return s2 + if s2 is None: + return s1 + result = {} + for var in self.variables: + v1 = s1.get(var, abstract_value(None)) + v2 = s2.get(var, abstract_value(None)) + if v1.value == v2.value: + result[var] = v1 + else: + result[var] = abstract_value(None) + return result + + def included(self, s1: state, s2: state) -> bool: + if s1 is None: + return True + if s2 is None: + return False + return all( + s2.get(var, abstract_value(None)).value in {s1.get(var, abstract_value(None)).value, None} + for var in self.variables + ) - def included(self,s1: state,s2: state) -> bool: - ... + def tr_skip(self, s: state) -> state: + return s - def tr_skip(self,s: state) -> state: - ... + def tr_set(self, s: state, v: str, e: ArithExpr) -> state: + if s is None: + return None + new_env = s.copy() + new_env[v] = eval_aexp(s, e) or abstract_value(None) + return new_env + + def tr_test(self, s: state, c: BoolExpr) -> state: + if s is None: + return None + + res = eval_bexp(s, c) + if res is None: + return None + if res.value is False: + return None - def tr_set(self,s: state,v: str,e: ArithExpr) -> state: - ... + if isinstance(c, BEEq) and isinstance(c.left_expr, AEVar) and isinstance(c.right_expr, AECst): + var = c.left_expr.var + val = c.right_expr.value + new_env = s.copy() + new_env[var] = abstract_value(val) + return new_env - def tr_test(self,s: state,c: BoolExpr) -> state: - ... + return s - def tr_err(self,s: state,e: Expr) -> state: - ... + def tr_err(self, s: state, e: Expr) -> state: + return None diff --git a/Pystan/config/example_iteration.py b/Pystan/config/example_iteration.py index 3a9a71b..02020a1 100644 --- a/Pystan/config/example_iteration.py +++ b/Pystan/config/example_iteration.py @@ -50,3 +50,5 @@ res = fixpoint_iteration(NoInfo(),cfg) unreachable = [node for node, state in res.items() if state == frozenset()] for node in unreachable: print(f"{node} is unreachable") + +# Les noeuds inaccessibles sont ceux qui sont gardés par une condition toujours fausse. -- GitLab