@@ -303,7 +303,7 @@ modules : module
303303 | modules module
304304 ;
305305
306- module : module_head sections
306+ module : module_head module_body
307307 ;
308308
309309module_name : STRING_Token
@@ -314,34 +314,71 @@ module_head: MODULE_Token module_name { new_module($2); }
314314 | MODULE_Token module_name { new_module($2 ); } ' (' module_argument_list_opt ' )'
315315 ;
316316
317- sections : /* epsilon */
318- | sections section
317+ module_body : /* optional */
318+ | module_body module_element
319319 ;
320320
321321semi_opt : /* empty */
322322 | ' ;'
323323 ;
324324
325- section : VAR_Token vardecls
325+ module_element :
326+ var_declaration
327+ | define_declaration
328+ | assign_constraint
329+ | trans_constraint
330+ | init_constraint
331+ | invar_constraint
332+ | fairness_constraint
333+ | ctl_specification
334+ | ltl_specification
335+ | EXTERN_Token extern_var semi_opt
336+ | EXTERN_Token
337+ ;
338+
339+ var_declaration :
340+ VAR_Token vardecls
326341 | VAR_Token
327- | INIT_Token formula semi_opt { PARSER.module ->add_init (stack_expr($2 ), stack_expr($1 ).source_location()); }
328- | INIT_Token
329- | TRANS_Token formula semi_opt { PARSER.module ->add_trans (stack_expr($2 ), stack_expr($1 ).source_location()); }
330- | TRANS_Token
331- | SPEC_Token formula semi_opt { PARSER.module ->add_ctlspec (stack_expr($2 ), stack_expr($1 ).source_location()); }
332- | SPEC_Token
333- | LTLSPEC_Token formula semi_opt { PARSER.module ->add_ltlspec (stack_expr($2 ), stack_expr($1 ).source_location()); }
334- | LTLSPEC_Token
335- | ASSIGN_Token assignments
336- | ASSIGN_Token
337- | DEFINE_Token defines
342+ ;
343+
344+ define_declaration :
345+ DEFINE_Token defines
338346 | DEFINE_Token
339- | INVAR_Token formula semi_opt { PARSER.module ->add_invar (stack_expr($2 ), stack_expr($1 ).source_location()); }
347+ ;
348+
349+ assign_constraint :
350+ ASSIGN_Token assignments
351+ | ASSIGN_Token
352+ ;
353+
354+ trans_constraint :
355+ TRANS_Token formula semi_opt { PARSER.module ->add_trans (stack_expr($2 ), stack_expr($1 ).source_location()); }
356+ | TRANS_Token
357+ ;
358+
359+ init_constraint :
360+ INIT_Token formula semi_opt { PARSER.module ->add_init (stack_expr($2 ), stack_expr($1 ).source_location()); }
361+ | INIT_Token
362+ ;
363+
364+ invar_constraint :
365+ INVAR_Token formula semi_opt { PARSER.module ->add_invar (stack_expr($2 ), stack_expr($1 ).source_location()); }
340366 | INVAR_Token
341- | FAIRNESS_Token formula semi_opt { PARSER.module ->add_fairness (stack_expr($2 ), stack_expr($1 ).source_location()); }
367+ ;
368+
369+ fairness_constraint :
370+ FAIRNESS_Token formula semi_opt { PARSER.module ->add_fairness (stack_expr($2 ), stack_expr($1 ).source_location()); }
342371 | FAIRNESS_Token
343- | EXTERN_Token extern_var semi_opt
344- | EXTERN_Token
372+ ;
373+
374+ ctl_specification :
375+ SPEC_Token formula semi_opt { PARSER.module ->add_ctlspec (stack_expr($2 ), stack_expr($1 ).source_location()); }
376+ | SPEC_Token
377+ ;
378+
379+ ltl_specification :
380+ LTLSPEC_Token formula semi_opt { PARSER.module ->add_ltlspec (stack_expr($2 ), stack_expr($1 ).source_location()); }
381+ | LTLSPEC_Token
345382 ;
346383
347384extern_var : variable_name EQUAL_Token QUOTE_Token
0 commit comments