@@ -31,7 +31,9 @@ SIMULATE : 'simulate';
3131VALIDATE : ' validate' ;
3232CLASSIFY : ' classify' ;
3333ADAPT : ' adapt' ;
34+ MONITOR : ' monitor' ;
3435TICK : ' tick' ;
36+ WINDOW : ' window' ;
3537BREAKPOINT : ' breakpoint' ;
3638SUPER : ' super' ;
3739DESTROY : ' destroy' ;
@@ -49,6 +51,8 @@ CLASSIFIES: 'classifies';
4951RETRIEVES : ' retrieves' ;
5052DOMAIN : ' domain' ;
5153CONTEXT : ' context' ;
54+ STREAMER : ' streamer' ;
55+ EMITS : ' emits' ;
5256
5357// Keywords: constants
5458TRUE : ' True' ;
@@ -94,6 +98,9 @@ FMU : 'FMO';
9498PORT : ' port' ;
9599SPARQLMODE : ' SPARQL' ;
96100INFLUXMODE : ' INFLUXDB' ;
101+ // MONITORTYPE : 'Monitor';
102+ // QUERYRESULTTYPE : 'QueryResult';
103+ CLOCK : ' clock' ;
97104// Note that the IN, OUT constants are also used in
98105// TypeChecker.kt:translateType in the FMU branch; adapt strings there if
99106// changing the syntax here
@@ -117,13 +124,13 @@ namelist : NAME (COMMA NAME)*;
117124program : (class_def)* MAIN statement END (class_def)*;
118125
119126// classes
120- class_def : (abs=ABSTRACT )? (hidden=HIDE )? CLASS className = NAME (LT namelist GT )? (EXTENDS superType = type)? OPARAN (external=fieldDeclList)? CPARAN
127+ class_def : (abs=ABSTRACT )? (hidden=HIDE )? (streamer= STREAMER )? CLASS className = NAME (LT namelist GT )? (EXTENDS superType = type)? OPARAN (external=fieldDeclList)? CPARAN
121128 (internal = fieldDeclInitList)?
122129 (models_block)?
123130 (classifies_block (retrieves_block)?)?
124131 method_def*
125132 END ;
126- method_def : (abs=ABSTRACT )? (builtinrule=RULE )? (domainrule=DOMAIN )? (overriding=OVERRIDE )? type NAME OPARAN paramList? CPARAN (statement END )?;
133+ method_def : (abs=ABSTRACT )? (builtinrule=RULE )? (domainrule=DOMAIN )? (overriding=OVERRIDE )? type NAME OPARAN paramList? CPARAN emits_block? (statement END )?;
127134
128135models_block : MODELS owldescription=STRING SEMI #simple_models_block
129136 | MODELS OPARAN guard=expression CPARAN owldescription=STRING SEMI models_block #complex_models_block
@@ -132,14 +139,18 @@ classifies_block : CLASSIFIES owldescription=STRING SEMI # adapt
132139 ;
133140retrieves_block : RETRIEVES selectquery=STRING SEMI # adaptation_retrieves_block
134141 ;
142+ emits_block : EMITS OPARAN expression (COMMA expression)* CPARAN ;
143+
135144// Statements
136145statement : SKIP_S SEMI # skip_statment
137146 | ((declType = type)? target=expression ASS )? CLASSIFY OPARAN context=expression CPARAN SEMI # classify_statement
138147 | ADAPT OPARAN adapter=expression CPARAN SEMI # adapt_statement
139- | (declType = type)? expression ASS expression SEMI # assign_statement
148+ | (declType = type)? target=expression ASS MONITOR OPARAN registeredQuery=expression (COMMA expression)* CPARAN SEMI # monitor_statement
149+ | (clock = CLOCK )? (declType = type)? expression ASS expression SEMI # assign_statement
140150 | ((declType = type)? target=expression ASS )? SUPER OPARAN (expression (COMMA expression)*)? CPARAN SEMI # super_statement
141151 | RETURN expression SEMI # return_statement
142152 | fmu=expression DOT TICK OPARAN time=expression CPARAN SEMI # tick_statement
153+ | (declType = type)? target=expression ASS WINDOW OPARAN monitor=expression CPARAN SEMI # window_statement
143154 | ((declType = type)? target=expression ASS )? expression DOT NAME OPARAN (expression (COMMA expression)*)? CPARAN SEMI # call_statement
144155 // TODO: allow new statements without assignment
145156 | (declType = type)? target=expression ASS NEW newType = type OPARAN (expression (COMMA expression)*)? CPARAN (MODELS owldescription = expression)? SEMI # create_statement
@@ -194,6 +205,7 @@ expression : THIS # this_expression
194205type : NAME #simple_type
195206 | NAME LT typelist GT #nested_type
196207 | FMU OBRACK fmuParamList? CBRACK #fmu_type
208+ // | MONITORTYPE LT typelist GT #monitor_type
197209 ;
198210typelist : type (COMMA type)*;
199211param : type NAME ;
0 commit comments