Difference between pages "TextEditor EBNF" and "File:Tuto-0015.png"

From Event-B
(Difference between pages)
Jump to navigationJump to search
imported>Fabian
 
(Maintenance script uploaded File:Tuto-0015.png)
 
Line 1: Line 1:
{| align="right"
+
Our self-made Quick perspective.
| __TOC__
+
From the rodin platform tutorial.
|}
 
This page describes the text syntax for Event-B models in the TextEditor. It shows an EBNF and explains some details and design decisions.
 
 
 
See the [[Text_Editor]] page for details of the editor and the usage of the text syntax.
 
 
 
 
 
===EBNF for the TextEditor's syntax ===
 
 
 
parse_unit =
 
    'machine' identifier_literal comment*
 
    ('refines' identifier_literal (',' identifier_literal)*)?
 
    ('sees' identifier_literal (',' identifier_literal)*)?
 
    ('variables' identifier_list)?
 
    ('invariants' labeled_predicate_with_theorem+)?
 
    ('variant' variant)?
 
    ('events' event+)?
 
    end |
 
   
 
    'context' identifier_literal comment*
 
    ('extends' identifier_literal (',' identifier_literal)*)?
 
    ('sets' identifier_list)?
 
    ('constants' identifier_list)?
 
    ('axioms' labeled_predicate_with_theorem+)?
 
    end ;
 
 
variant = expression comment*;
 
 
event =
 
    convergence? 'event' identifier_literal comment*
 
    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 = '@' identifier_literal action comment*;
 
 
labeled_predicate = '@' identifier_literal predicate comment*;
 
 
labeled_predicate_with_theorem =
 
    '@' identifier_literal predicate comment*|
 
    'theorem' '@' identifier_literal predicate comment*;
 
 
identifier = identifier_literal comment*;
 
 
identifier_list = identifier identifier* ;
 
 
comment =
 
    '//' string-to-next-linebreak |
 
    '/*' string '*/' ;
 
 
 
 
 
===Explanation ===
 
====Formulas ====
 
As you might notice the grammar only describes the structure of machines and contexts. For the terminals ''predicate'', ''expression'' and ''action'' you can use the syntax for formulas which you already know from editing models with the graphical Event-B editor. You can use the ASCII representation of mathematical symbols or their unicode. See the Rodin help for details about the mathematical symbols and their ASCII counterparts.
 
 
 
====Comments ====
 
Also note that the rather strict position for comments is necessary. In the RodinDB most elements can be commented. That means if you comment an element this comment is attached to the element. To reflect this in a text syntax we need to exactly specify to which textual element a comment belongs. Therefore we decided to always associate a comment to the previous element.
 
Additionally database only allows one comment per element. The grammar allows multiple comments, but to reflect the database restriction to one internally multiple comments are concatenated to one with linebreaks between the separate comments.
 
 
 
 
 
===Examples ===
 
''Feel free to add own examples!''
 
 
 
 
 
Machine '''m0''' from example project '''maximum'''
 
 
 
 
 
Also see the [[TextEditor_Screenshots#Machine_.27m0.27_from_example_.27maximum.27|screenshot]] of this example.
 

Latest revision as of 20:49, 30 April 2020

Our self-made Quick perspective. From the rodin platform tutorial.