Difference between revisions of "TextEditor EBNF"

From Event-B
Jump to navigationJump to search
imported>Fabian
imported>Fabian
Line 48: Line 48:
 
   
 
   
 
  identifier_list = identifier (',' identifier)* ;
 
  identifier_list = identifier (',' identifier)* ;
 +
 +
comment =
 +
    '//' string-to-next-linebreak |
 +
    '/*' string '*/' ;

Revision as of 14:33, 13 May 2009

EBNF for the TextEditor's syntax

parse_unit =
   comment?
   'machine' identifier_literal
   ('refines' identifier_literal (',' identifier_literal)*)?
   ('sees' identifier_literal (',' identifier_literal)*)?
   ('variables' identifier_list)?
   ('invariants' labeled_predicate_with_theorem+)?
   ('variant' variant)?
   ('events' event+)?
   end |
   
   comment?
   'context' identifier_literal
   ('extends' identifier_literal (',' identifier_literal)*)?
   ('sets' identifier_list)?
   ('constants' identifier_list)?
   ('axioms' labeled_predicate_with_theorem+)?
   end ;

variant = comment? expression ;

event =
   comment?
   convergence? 'event' identifier_literal
   event_refinement?
   ('any' identifier_list)?
   ('where' labeled_predicate+)?
   ('with' labeled_predicate+)?
   ('then' labeled_action+)? ;

convergence = 'ordinary' | 'convergent' | 'anticipated' ;

event_refinement =
   'refines' identifier_literal (',' identifier_literal)* |
   'extends' identifier_literal ;

labeled_action = comment? '@' identifier_literal action ;

labeled_predicate = comment? '@' identifier_literal predicate ;

labeled_predicate_with_theorem =
   comment? '@' identifier_literal predicate |
   comment? 'theorem' '@' identifier_literal predicate ;

identifier = comment? identifier_literal ;

identifier_list = identifier (',' identifier)* ;

comment =
   '//' string-to-next-linebreak |
   '/*' string '*/' ;