Bonjour,


Je vais (enfin) passer aux choses sérieuses... la forme SSA

dans mon interprète très simpliste, j'ai décidé d'utiliser ce type pour mon ast


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
/// represents the Abstract Syntax Tree
type struct_expr =
  |Intconst of int
  |Boolconst of bool
  |Test of string * struct_expr list
  |Operateur of string * struct_expr list
  |Var of string
  |Assign of struct_expr * struct_expr
  |If of struct_expr * struct_expr list * struct_expr list
  |While of struct_expr * struct_expr list
  |Break
  |Declare of string list
  |Assert of struct_expr
with
  member this.immediate_dominator : struct_expr option = None
  member this.domination_frontier : struct_expr list = []
ça me permet de jouer avec un match sur les éléments, mais j'aimerais aussi pouvoir avoir quelques petites infos cachées dont je vais avoir besoin pour le calcul de ma forme SSA à savoir :
  • le dominateur immediat
  • la frontière de domination



le hic est qu'actuellement je ne peux modifier ces propriétés...
comment feriez-vous sans trop changer la structure de l'ast ?


nb : je n'ai volontairement pas séparé les instructions des expressions
nb2 : je n'ai pas encore mis les phi et les attributs pour le renommage