Skip to content
Snippets Groups Projects
evalConst.mli 2.6 KiB
Newer Older
(** Time-stamp: <modified the 29/08/2008 (at 10:21) by Erwan Jahier> *)
Erwan Jahier's avatar
Erwan Jahier committed
(*
Erwan Jahier's avatar
Erwan Jahier committed

Erwan Jahier's avatar
Erwan Jahier committed
	Evaluation statique des expressions "réputées" constantes
	(defs de constantes, tailles de tableaux, indices et step des arrays).

PARAMETRES :
	Pour avoir qq chose de générique, les fonctions
	sont paramétrées par un "Eff.id_solver", qui contient deux fonctions :
	(voir Eff) 
Erwan Jahier's avatar
Erwan Jahier committed

	type Eff.id_solver = {
		id2const : Ident.idref -> Lxm.t -> const_eff
		id2type : Ident.idref -> Lxm.t -> const_eff
Erwan Jahier's avatar
Erwan Jahier committed
	}
	(N.B. on passe le lexeme pour déventuels messages d'erreurs)

FONCTION PRINCIPALE : 
	Elle lève "Compile_error lxm msg" en cas d'erreur.

	eval_const
		(env : Eff.id_solver) 
Erwan Jahier's avatar
Erwan Jahier committed
		(vexp : val_exp)
	-> const_eff list

	(N.B. dans le cas général, une val_exp peut dénoter un tuple, on
	rend donc bien une liste de constante)

FONCTIONS DERIVEES : (permet de préciser les messages d'erreur)
	Elles lèvent "EvalArray_error msg" en cas d'erreur,
	se qui permet de récupérer l'erreur. 

	eval_array_size
		(env : Eff.id_solver) 
Erwan Jahier's avatar
Erwan Jahier committed
		(vexp : val_exp)
	-> int

	(N.B. ne renvoie que des taille correctes : > 0)

	eval_array_index
		(env : Eff.id_solver) 
Erwan Jahier's avatar
Erwan Jahier committed
		(vexp : val_exp)
		(sz : int)
	-> int 

	(N.B. on doit préciser la taille sz du tableau) 

	eval_array_slice
		(env : Eff.id_solver) 
Erwan Jahier's avatar
Erwan Jahier committed
		(sl : slice_info srcflagged)
Erwan Jahier's avatar
Erwan Jahier committed
		(sz : int)
Erwan Jahier's avatar
Erwan Jahier committed
	-> slice_eff

	N.B. slice_info_eff = {first: int; last: int; step: int; width: int}
Erwan Jahier's avatar
Erwan Jahier committed
	N.B. on doit passer le lexeme de l'opération à cause d'éventuels
	warnings
Erwan Jahier's avatar
Erwan Jahier committed


exception EvalArray_error of string

val f : Eff.id_solver -> SyntaxTreeCore.val_exp -> Eff.const list
Erwan Jahier's avatar
Erwan Jahier committed

(**
   Rôle : calcule une taille de tableau 
   
   Entrées: 
Erwan Jahier's avatar
Erwan Jahier committed

Erwan Jahier's avatar
Erwan Jahier committed
	int (strictement positif)

Erwan Jahier's avatar
Erwan Jahier committed
	EvalArray_error "bad array size, type int expected but get <t>" si t pas int
	EvalArray_error "bad array size <n>" si n <= 0
val eval_array_size : Eff.id_solver -> SyntaxTreeCore.val_exp -> int
Erwan Jahier's avatar
Erwan Jahier committed

Erwan Jahier's avatar
Erwan Jahier committed

Erwan Jahier's avatar
Erwan Jahier committed
	id_solver, val_exp, taille du tableau

Erwan Jahier's avatar
Erwan Jahier committed
	int (entre 0 et taille du tableau -1

Erwan Jahier's avatar
Erwan Jahier committed
	EvalArray_error msg si pas bon
val eval_array_index : Eff.id_solver -> SyntaxTreeCore.val_exp -> 
Erwan Jahier's avatar
Erwan Jahier committed

Erwan Jahier's avatar
Erwan Jahier committed

Erwan Jahier's avatar
Erwan Jahier committed
	id_solver, slice_info, size du tableau,
	lxm (source de l'opération slice pour warning)
	slice_info_eff, i.e.
Erwan Jahier's avatar
Erwan Jahier committed
	(fisrt,last,step,width) tels que step <> 0 et
	- si step > 0 alors 0<=first<=last et first<=sz
	- si step < 0 alors 0<=last<=first et first<=sz
	- 1<=width<=sz 
Erwan Jahier's avatar
Erwan Jahier committed
	EvalArray_error msg si pas bon
  Eff.id_solver -> SyntaxTreeCore.slice_info -> int -> Lxm.t -> 
  Eff.slice_info