Move from the x reset y syntax to reset x every y one

As described on https://www.di.ens.fr/~pouzet/cours/mpri/cours7/coiteration.pdf#page=4
This commit is contained in:
Benjamin Loison 2022-12-19 16:28:03 +01:00
parent 01d4a08e8a
commit e63123d8f6
2 changed files with 5 additions and 3 deletions

View File

@ -26,6 +26,7 @@
("merge", TO_merge); ("merge", TO_merge);
("when", WHEN); ("when", WHEN);
("reset", RESET); ("reset", RESET);
("every", EVERY);
("pre", MO_pre); ("pre", MO_pre);
("true", CONST_BOOL(true)); ("true", CONST_BOOL(true));
("false", CONST_BOOL(false)); ("false", CONST_BOOL(false));

View File

@ -144,6 +144,7 @@
%token WHEN %token WHEN
%token RESET %token RESET
%token EVERY
%token IF %token IF
%token THEN %token THEN
@ -381,9 +382,9 @@ expr:
then EWhen (t1, e1, e2) then EWhen (t1, e1, e2)
else raise (MyParsingError ("The when does not type-check!", else raise (MyParsingError ("The when does not type-check!",
current_location())) } current_location())) }
| expr RESET expr | RESET expr EVERY expr
{ let e1 = $1 in let t1 = type_exp e1 in { let e1 = $2 in let t1 = type_exp e1 in
let e2 = $3 in let t2 = type_exp e2 in let e2 = $4 in let t2 = type_exp e2 in
if t2 = [TBool] if t2 = [TBool]
then EReset (t1, e1, e2) then EReset (t1, e1, e2)
else raise (MyParsingError ("The reset does not type-check!", else raise (MyParsingError ("The reset does not type-check!",