From e63123d8f6ed2372c8a5f8f132083c09b22104f6 Mon Sep 17 00:00:00 2001 From: Benjamin Loison Date: Mon, 19 Dec 2022 16:28:03 +0100 Subject: [PATCH] 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 --- src/lexer.mll | 1 + src/parser.mly | 7 ++++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/lexer.mll b/src/lexer.mll index b11ee74..27bf17a 100644 --- a/src/lexer.mll +++ b/src/lexer.mll @@ -26,6 +26,7 @@ ("merge", TO_merge); ("when", WHEN); ("reset", RESET); + ("every", EVERY); ("pre", MO_pre); ("true", CONST_BOOL(true)); ("false", CONST_BOOL(false)); diff --git a/src/parser.mly b/src/parser.mly index f5b92d5..71bbc0b 100644 --- a/src/parser.mly +++ b/src/parser.mly @@ -144,6 +144,7 @@ %token WHEN %token RESET +%token EVERY %token IF %token THEN @@ -381,9 +382,9 @@ expr: then EWhen (t1, e1, e2) else raise (MyParsingError ("The when does not type-check!", current_location())) } - | expr RESET expr - { let e1 = $1 in let t1 = type_exp e1 in - let e2 = $3 in let t2 = type_exp e2 in + | RESET expr EVERY expr + { let e1 = $2 in let t1 = type_exp e1 in + let e2 = $4 in let t2 = type_exp e2 in if t2 = [TBool] then EReset (t1, e1, e2) else raise (MyParsingError ("The reset does not type-check!",