summaryrefslogtreecommitdiff
path: root/frontend/parser.mly
diff options
context:
space:
mode:
authorAlex Auvolat <alex.auvolat@ansys.com>2014-06-13 11:31:50 +0200
committerAlex Auvolat <alex.auvolat@ansys.com>2014-06-13 11:31:50 +0200
commitf7868083de2f351b5195149870e6e77398da44f9 (patch)
tree88e4b477edec70ead05f2a3d69e7a270966cd00e /frontend/parser.mly
parent26b263fbe8938d1fe13ee67ab87a2edeea9c99aa (diff)
downloadscade-analyzer-f7868083de2f351b5195149870e6e77398da44f9.tar.gz
scade-analyzer-f7868083de2f351b5195149870e6e77398da44f9.zip
Parse activate blocks.
Diffstat (limited to 'frontend/parser.mly')
-rw-r--r--frontend/parser.mly19
1 files changed, 16 insertions, 3 deletions
diff --git a/frontend/parser.mly b/frontend/parser.mly
index fb00478..ec283c3 100644
--- a/frontend/parser.mly
+++ b/frontend/parser.mly
@@ -13,7 +13,8 @@ open Util
%token VAR LET TEL
%token PRE
%token ASSUME GUARANTEE
-%token AUTOMATON STATE INITIAL UNTIL UNLESS RESUME
+%token ACTIVATE
+%token AUTOMATON STATE INITIAL UNTIL UNLESS RESUME RESTART
%token LPAREN RPAREN
%token LCURLY RCURLY
@@ -128,8 +129,19 @@ trans(TT):
| { [] }
transition:
-| IF e=ext(expr) RESUME s=ext(IDENT) { (e, s) }
-
+| IF e=ext(expr) RESUME s=ext(IDENT) { (e, s, false) }
+| IF e=ext(expr) RESTART s=ext(IDENT) { (e, s, true) }
+
+activate:
+| ACTIVATE a=activate_if RETURNS r=separated_list(COMMA, IDENT) { (a, r) }
+activate_if:
+| IF c=ext(expr) THEN t=activate_if ELSE e=activate_if { AST_activate_if(c, t, e) }
+| lv=option(var_decl) b=body
+{ AST_activate_body {
+ id = "activate"^uid();
+ locals = (match lv with Some v -> v | None -> []);
+ body = b;
+} }
eqn:
| i=separated_list(COMMA, ext(IDENT)) EQUAL e=ext(expr)
@@ -137,6 +149,7 @@ eqn:
| ASSUME i=ext(IDENT) COLON e=ext(expr) { AST_assume(i, e) }
| GUARANTEE i=ext(IDENT) COLON e=ext(expr) { AST_guarantee(i, e) }
| a=automaton { AST_automaton(a) }
+| a=activate { AST_activate(a) }
typ:
| INT { AST_TINT }