Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Intégration des domaines de règles dans le langage M #221

Merged
merged 27 commits into from
Aug 17, 2023
Merged
Show file tree
Hide file tree
Changes from 23 commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
d279d92
Analyseur syntaxique pour l'extension de domaines de règles.
david-michel1 Jun 14, 2023
83b9fa0
Suite du précédent commit...
david-michel1 Jun 14, 2023
9f3ac5d
Remplacement partiel des tags par les domaines de règles (et les ench…
david-michel1 Jun 15, 2023
a2f8977
Avancée du remplacement des tags par les domaines.
Jun 20, 2023
248d4fa
Séparation des tags, des domaines de règles et des enchaîneurs.
david-michel1 Jun 21, 2023
b451fbe
Ajout de modules utiles (ensemble d'ensembles, etc.)
david-michel1 Jun 21, 2023
e49c859
Ajout de modules utiles (map d'ensembles, etc.)
david-michel1 Jun 23, 2023
511e531
Ajout de l'option without_dgfip_m.
david-michel1 Jun 23, 2023
a464a18
Ajout des domaines de vérifs.
david-michel1 Jun 28, 2023
af23cc7
Merge branch 'master' into extension_m_metier
david-michel1 Jun 28, 2023
e23fb38
Élimination du type chain_tag.
david-michel1 Jul 4, 2023
8969609
Correction d'une erreur bête.
david-michel1 Jul 4, 2023
d2087eb
Modification du M++ pour tenir compte des domaines.
david-michel1 Jul 6, 2023
e4c19b9
Correction des fichiers .mpp.
david-michel1 Jul 6, 2023
c1afc0c
Lecture des catégories de variables autorisées dans les domaines de v…
david-michel1 Jul 11, 2023
5848fd3
Réécriture des filtres de vérifs avec des domaines.
david-michel1 Jul 18, 2023
42b093e
Gestion des positions dans le M DGFiP interne.
david-michel1 Jul 20, 2023
0f7f581
Suppression des variables "dummy" dans les vérifs.
david-michel1 Jul 20, 2023
7d0d217
Modifications du MPP pour le filtrage des vérifs (en cours).
Jul 24, 2023
280a380
Modification du MPP pour le filtrage des vérifs.
david-michel1 Jul 25, 2023
438b7df
nsformation de "non_auto_cc" en un domaine de vérif par défaut.
Jul 26, 2023
5aaf051
Petit nettoyage
david-michel1 Jul 27, 2023
e42b8b8
Indentation
david-michel1 Jul 27, 2023
e2089e3
Factorisation et nettoyage du code.
david-michel1 Aug 4, 2023
35a7267
Supression du doublon "category" - "cats".
david-michel1 Aug 8, 2023
64a12b9
Suppression des constructions métiers ad hoc du MPP.
david-michel1 Aug 10, 2023
86273f1
Correction dans l'analyse du MPP.
david-michel1 Aug 10, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions mpp_specs/2018_6_7.mpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ compute_benefits():
V_INDTEO = 1
V_CALCUL_NAPS = 1
partition with var_is_taxbenefit:
IAD11, INE, IRE <- call_m(primitif)
IAD11, INE, IRE <- call_m_rules(primitive)
V_CALCUL_NAPS = 0
iad11 = cast(IAD11)
ire = cast(IRE)
Expand Down Expand Up @@ -41,9 +41,9 @@ compute_double_liquidation3(outputs):
8ZG = v_8ZG
V_ACO_MTAP = 0
V_NEGACO = 0
outputs <- call_m(isf)
outputs <- call_m(primitif)
outputs <- call_m(taux)
outputs <- call_m_rules(isf)
outputs <- call_m_rules(primitive)
outputs <- call_m_rules(taux)

compute_double_liquidation_exit_taxe(outputs):
annee = 2018 # FIXME
Expand Down
8 changes: 4 additions & 4 deletions mpp_specs/2019_8_0.mpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ compute_benefits():
partition with var_is_taxbenefit:
V_INDTEO = 1
V_CALCUL_NAPS = 1
IAD11, INE, IRE <- call_m(primitif)
IAD11, INE, IRE <- call_m_rules(primitive)
V_CALCUL_NAPS = 0
iad11 = cast(IAD11)
ire = cast(IRE)
Expand Down Expand Up @@ -41,9 +41,9 @@ compute_double_liquidation3(outputs):
8ZG = v_8ZG
V_ACO_MTAP = 0
V_NEGACO = 0
outputs <- call_m(isf)
outputs <- call_m(primitif)
outputs <- call_m(taux)
outputs <- call_m_rules(isf)
outputs <- call_m_rules(primitive)
outputs <- call_m_rules(taux)

compute_double_liquidation_exit_taxe(outputs):
annee = 2018 # FIXME
Expand Down
6 changes: 3 additions & 3 deletions mpp_specs/2020_6_5.mpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@ compute_article1731bis():
PREM8_11 = 1

calcul_primitif_isf(outputs):
outputs <- call_m(isf)
outputs <- call_m_rules(isf)

calcul_primitif(outputs):
outputs <- call_m(primitif)
outputs <- call_m_rules(primitive)

calcul_primitif_taux(outputs):
outputs <- call_m(taux)
outputs <- call_m_rules(taux)

compute_benefits():
if exists_deposit_defined_variables() or exists_taxbenefit_ceiled_variables():
Expand Down
96 changes: 48 additions & 48 deletions mpp_specs/dgfip_base.mpp
Original file line number Diff line number Diff line change
@@ -1,156 +1,156 @@

calcul_primitif():
outputs <- call_m(primitif)
outputs <- call_m_rules(primitive)

calcul_primitif_isf():
outputs <- call_m(isf)
outputs <- call_m_rules(isf)

calcul_primitif_taux():
outputs <- call_m(taux)
outputs <- call_m_rules(taux)

calcul_correctif():
outputs <- call_m(corrective)
outputs <- call_m_rules(corrective)

sauve_base_1728():
X = X
# outputs <- call_m(base_1728)
# outputs <- call_m_rules(base_1728 corrective)

sauve_base_premier():
outputs <- call_m(base_premier)
outputs <- call_m_rules(base_premier corrective)

sauve_base_stratemajo():
outputs <- call_m(base_stratemajo)
outputs <- call_m_rules(base_stratemajo corrective)

sauve_base_anterieure():
outputs <- call_m(base_anterieure)
outputs <- call_m_rules(base_anterieure corrective)

sauve_base_anterieure_cor():
outputs <- call_m(base_anterieure_cor)
outputs <- call_m_rules(base_anterieure_cor corrective)

sauve_base_inr_tl():
outputs <- call_m(base_inr_tl)
outputs <- call_m_rules(base_inr_tl corrective)

sauve_base_inr_tl22():
outputs <- call_m(base_inr_tl22)
outputs <- call_m_rules(base_inr_tl22 corrective)

sauve_base_inr_tl24():
outputs <- call_m(base_inr_tl24)
outputs <- call_m_rules(base_inr_tl24 corrective)

sauve_base_inr_ntl():
outputs <- call_m(base_inr_ntl)
outputs <- call_m_rules(base_inr_ntl corrective)

sauve_base_inr_ntl22():
outputs <- call_m(base_inr_ntl22)
outputs <- call_m_rules(base_inr_ntl22 corrective)

sauve_base_inr_ntl24():
outputs <- call_m(base_inr_ntl24)
outputs <- call_m_rules(base_inr_ntl24 corrective)

sauve_base_inr_ref():
outputs <- call_m(base_inr_ref)
outputs <- call_m_rules(base_inr_ref corrective)

sauve_base_inr_r9901():
outputs <- call_m(base_inr_r9901)
outputs <- call_m_rules(base_inr_r9901 corrective)

sauve_base_inr_intertl():
outputs <- call_m(base_inr_intertl)
outputs <- call_m_rules(base_inr_intertl corrective)

sauve_base_inr_inter22():
outputs <- call_m(base_inr_inter22)
outputs <- call_m_rules(base_inr_inter22 corrective)

sauve_base_inr_cimr99():
outputs <- call_m(base_inr_cimr99)
outputs <- call_m_rules(base_inr_cimr99 corrective)

sauve_base_inr_cimr07():
outputs <- call_m(base_inr_cimr07)
outputs <- call_m_rules(base_inr_cimr07 corrective)

sauve_base_inr_cimr24():
outputs <- call_m(base_inr_cimr24)
outputs <- call_m_rules(base_inr_cimr24 corrective)

sauve_base_inr_tlcimr07():
outputs <- call_m(base_inr_tlcimr07)
outputs <- call_m_rules(base_inr_tlcimr07 corrective)

sauve_base_inr_tlcimr24():
outputs <- call_m(base_inr_tlcimr24)
outputs <- call_m_rules(base_inr_tlcimr24 corrective)

sauve_base_tlnunv():
X = X
# outputs <- call_m(base_tlnunv)
# outputs <- call_m_rules(base_tlnunv corrective)

sauve_base_tl():
outputs <- call_m(base_tl)
outputs <- call_m_rules(base_tl corrective)

sauve_base_tl_init():
outputs <- call_m(base_tl_init)
outputs <- call_m_rules(base_tl_init corrective)

sauve_base_tl_rect():
outputs <- call_m(base_tl_rect)
outputs <- call_m_rules(base_tl_rect corrective)

sauve_base_initial():
outputs <- call_m(base_INITIAL)
outputs <- call_m_rules(base_INITIAL corrective)

sauve_base_abat98():
outputs <- call_m(base_ABAT98)
outputs <- call_m_rules(base_ABAT98 corrective)

sauve_base_abat99():
outputs <- call_m(base_ABAT99)
outputs <- call_m_rules(base_ABAT99 corrective)

sauve_base_majo():
outputs <- call_m(base_MAJO)
outputs <- call_m_rules(base_MAJO corrective)

sauve_base_inr():
outputs <- call_m(base_INR)
outputs <- call_m_rules(base_INR corrective)

sauve_base_HR():
outputs <- call_m(base_HR)
outputs <- call_m_rules(base_HR corrective)

ENCH_TL():
outputs <- call_m(ENCH_TL)
outputs <- call_m_chain(ENCH_TL)

verif_calcul_primitive_isf_raw():
call_m_verif(isf,calculee)
call_m_verifs(isf, nb_category(calculee *) > 0)

verif_calcul_primitive_raw():
verif_calcul_primitive_isf_raw()
call_m_verif(primitif,calculee)
call_m_verifs(primitive, nb_category(calculee *) > 0)

verif_calcul_corrective_raw():
outputs <- calcul_primitif_isf()
verif_calcul_primitive_isf_raw()
call_m_verif(corrective,calculee)
call_m_verifs(corrective, nb_category(calculee *) > 0)

verif_saisie_cohe_primitive_isf_raw():
call_m_verif(isf,saisie)
call_m_verifs(isf, nb_category(saisie *) > 0 and nb_category(calculee *) == 0)

verif_saisie_cohe_primitive_raw():
verif_saisie_cohe_primitive_isf_raw()
outputs <- calcul_primitif_isf()
verif_calcul_primitive_isf_raw()
call_m_verif(primitif,saisie)
call_m_verifs(primitive, nb_category(saisie *) > 0 and nb_category(calculee *) == 0)

verif_saisie_cohe_corrective_raw():
verif_saisie_cohe_primitive_isf_raw()
call_m_verif(corrective,saisie)
call_m_verifs(corrective, nb_category(saisie *) > 0 and nb_category(calculee *) == 0)

verif_cohe_horizontale_raw():
call_m_verif(horizontale)
call_m_verifs(horizontale corrective)

verif_contexte_cohe_primitive_raw():
call_m_verif(primitive,contexte)
call_m_verifs(primitive, nb_category(saisie contexte) > 0 and nb_category(calculee *) == 0)

verif_contexte_cohe_corrective_raw():
call_m_verif(corrective,contexte)
call_m_verifs(corrective, nb_category(saisie contexte) > 0 and nb_category(calculee *) == 0)

verif_famille_cohe_primitive_raw():
call_m_verif(primitive,famille)
call_m_verifs(primitive, nb_category(saisie famille) > 0 and nb_category(calculee *) == 0)

verif_famille_cohe_corrective_raw():
call_m_verif(corrective,famille)
call_m_verifs(corrective, nb_category(saisie famille) > 0 and nb_category(calculee *) == 0)

verif_revenu_cohe_primitive_raw():
call_m_verif(primitive,revenu)
call_m_verifs(primitive, nb_category(saisie revenu) > 0 and nb_category(calculee *) == 0)

verif_revenu_cohe_corrective_raw():
call_m_verif(corrective,revenu)
call_m_verifs(corrective, nb_category(saisie revenu) > 0 and nb_category(calculee *) == 0)

dgfip_calculation():
APPLI_OCEANS = 0
Expand Down
11 changes: 4 additions & 7 deletions src/mlang/backend_compilers/bir_to_dgfip_c.ml
Original file line number Diff line number Diff line change
Expand Up @@ -425,7 +425,6 @@ let generate_mpp_functions_signatures (oc : Format.formatter)

let generate_rovs_files (dgfip_flags : Dgfip_options.flags) (program : program)
(folder : string) (vm : Dgfip_varid.var_id_map) =
let module StringMap = Map.Make (String) in
let default_file = "default" in
let filemap =
ROVMap.fold
Expand All @@ -438,14 +437,12 @@ let generate_rovs_files (dgfip_flags : Dgfip_options.flags) (program : program)
^ ".c"
in
let filerovs =
match StringMap.find_opt file filemap with
| None -> []
| Some fr -> fr
match StrMap.find_opt file filemap with None -> [] | Some fr -> fr
in
StringMap.add file (rov :: filerovs) filemap)
program.rules_and_verifs StringMap.empty
StrMap.add file (rov :: filerovs) filemap)
program.rules_and_verifs StrMap.empty
in
StringMap.fold
StrMap.fold
(fun file rovs orphan ->
if String.equal file default_file then rovs @ orphan
else
Expand Down
34 changes: 11 additions & 23 deletions src/mlang/backend_compilers/dgfip_gen_files.ml
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,6 @@
You should have received a copy of the GNU General Public License along with
this program. If not, see <https://www.gnu.org/licenses/>. *)

module StringSet = Set.Make (String)
module StringMap = Map.Make (String)

let ascii_to_ebcdic =
[|
0; 1; 2; 3; 55; 45; 46; 47; 22; 5; 37; 11; 12; 13; 14; 15;
Expand Down Expand Up @@ -152,15 +149,9 @@ let computed_var_subtype cv : var_subtype =
in
if is_base then Base else Computed

let computed_var_is_output cv =
List.exists
(fun st -> String.equal (Pos.unmark st) Mast.givenback_category)
cv.Mast.comp_category
let computed_var_is_output cv = cv.Mast.comp_is_givenback

let input_var_is_output iv =
List.exists
(fun st -> String.equal (Pos.unmark st) Mast.givenback_category)
iv.Mast.input_category
let input_var_is_output iv = iv.Mast.input_is_givenback

let consider_output is_ebcdic attribs =
is_ebcdic = false
Expand Down Expand Up @@ -873,7 +864,7 @@ let get_rules_verif_etc prog =
( Pos.unmark r.rule_number :: rules,
match r.rule_chaining with
| None -> chainings
| Some cn -> StringSet.add (Pos.unmark cn) chainings )
| Some cn -> StrSet.add (Pos.unmark cn) chainings )
else (rules, chainings)
in
(rules, verifs, errors, chainings)
Expand All @@ -894,8 +885,7 @@ let get_rules_verif_etc prog =
| _ -> (rules, verifs, errors, chainings))
(rules, verifs, errors, chainings)
file)
([], [], [], StringSet.empty)
prog
([], [], [], StrSet.empty) prog
in

let rules = List.fast_sort compare rules in
Expand Down Expand Up @@ -930,12 +920,10 @@ let gen_table_call fmt flags vars_debug rules chainings errors =
Format.fprintf fmt "};\n\n"
end;

StringSet.iter
(fun cn -> Format.fprintf fmt "extern void %s();\n" cn)
chainings;
StrSet.iter (fun cn -> Format.fprintf fmt "extern void %s();\n" cn) chainings;

Format.fprintf fmt "T_desc_ench desc_ench[NB_ENCH + 1] = {\n";
StringSet.iter
StrSet.iter
(fun cn -> Format.fprintf fmt " { \"%s\", %s },\n" cn cn)
chainings;
Format.fprintf fmt "};\n"
Expand Down Expand Up @@ -992,7 +980,7 @@ let gen_var_h fmt flags vars vars_debug rules verifs chainings errors =
let nb_variation = count vars (Input (Some Variation)) in
let nb_penalite = count vars (Input (Some Penality)) in
let nb_restituee = count vars Output in
let nb_ench = StringSet.cardinal chainings in
let nb_ench = StrSet.cardinal chainings in
let nb_err = List.length errors in
let nb_debug = List.map List.length vars_debug in
let nb_call = List.length rules in
Expand Down Expand Up @@ -1175,11 +1163,11 @@ let extract_var_ids (cprog : Bir.program) vars =
let pvars = cprog.mir_program.program_vars in
let add vn v vm =
let vs =
match StringMap.find_opt vn vm with
match StrMap.find_opt vn vm with
| None -> VariableSet.empty
| Some vs -> vs
in
StringMap.add (Pos.unmark v.Variable.name) (VariableSet.add v vs) vm
StrMap.add (Pos.unmark v.Variable.name) (VariableSet.add v vs) vm
in
(* Build a map from variable names to all their definitions (with different
ids) *)
Expand All @@ -1188,7 +1176,7 @@ let extract_var_ids (cprog : Bir.program) vars =
(fun v vm ->
let vm = add (Pos.unmark v.Variable.name) v vm in
match v.Variable.alias with Some a -> add a v vm | None -> vm)
pvars StringMap.empty
pvars StrMap.empty
in
let process_var ~alias
( tvar,
Expand Down Expand Up @@ -1219,7 +1207,7 @@ let extract_var_ids (cprog : Bir.program) vars =
(fun vm vd ->
let name, vid = process_var ~alias:false vd in
let vs =
try StringMap.find name vars_map
try StrMap.find name vars_map
with Not_found ->
Errors.raise_error (Format.asprintf "Variable %s is undeclared" name)
in
Expand Down
Loading
Loading