Event-B XText Front-end User Guide: Difference between revisions
From Event-B
Jump to navigationJump to search
imported>Son |
imported>Son |
||
| Line 64: | Line 64: | ||
=== XMachine === | === XMachine === | ||
* Any file with extension ''*.bumx'' will be recognised as XMachine file. As a result, XMachine file can be created by the standard ''New File'' wizard of Eclipse. | |||
* The XText syntax of XMachine file is as follows. | |||
XMachine returns emachine::Machine: | |||
{emachine::Machine} | |||
(comment=(ML_COMMENT|SL_COMMENT))? | |||
'machine' name=ID | |||
('refines' refines+=[emachine::Machine])? | |||
('sees' sees+=[econtext::Context]+)? | |||
('variables' variables+=XVariable+)? | |||
('invariants' invariants+=XInvariant+)? | |||
('variant' variant=XVariant)? | |||
('events' events+=XEvent (';' events+=XEvent)*)? | |||
('end') | |||
; | |||
XVariable returns emachine::Variable: | |||
{emachine::Variable} | |||
(comment=(ML_COMMENT|SL_COMMENT))? | |||
name=ID | |||
; | |||
XInvariant returns emachine::Invariant: | |||
{emachine::Invariant} | |||
(comment=(ML_COMMENT|SL_COMMENT))? | |||
name=XLABEL predicate=STRING (theorem?='theorem')? | |||
; | |||
terminal XLABEL returns ecore::EString: | |||
'@' !(':')+ ':' | |||
; | |||
XVariant returns emachine::Variant: | |||
{emachine::Variant} | |||
(comment=(ML_COMMENT|SL_COMMENT))? | |||
expression=STRING | |||
; | |||
XEvent returns emachine::Event: | |||
{emachine::Event} | |||
(comment=(ML_COMMENT|SL_COMMENT))? | |||
name=ID | |||
( | |||
(extended?='extended')? & | |||
(convergence=XConvergence)? | |||
) | |||
('refines' refines+=[emachine::Event]+)? | |||
( | |||
('with' witnesses+=XWitness+)? | |||
'begin' | |||
actions+=XAction+ | |||
'end' | |||
| | |||
'when' | |||
guards+=XGuard+ | |||
('with' witnesses+=XWitness+)? | |||
('then' | |||
actions+=XAction+)? | |||
'end' | |||
| | |||
'any' | |||
parameters+=XParameter+ | |||
'where' | |||
guards+=XGuard+ | |||
('with' witnesses+=XWitness+)? | |||
('then' | |||
actions+=XAction+)? | |||
'end' | |||
)? | |||
; | |||
enum XConvergence returns emachine::Convergence: | |||
ordinary = 'ordinary' | convergent = 'convergent' | anticipated = 'anticipated'; | |||
XParameter returns emachine::Parameter: | |||
{emachine::Parameter} | |||
(comment=(ML_COMMENT|SL_COMMENT))? | |||
name=ID | |||
; | |||
XGuard returns emachine::Guard: | |||
{emachine::Guard} | |||
(comment=(ML_COMMENT|SL_COMMENT))? | |||
name=XLABEL predicate=STRING (theorem?='theorem')? | |||
; | |||
XWitness returns emachine::Witness: | |||
{emachine::Witness} | |||
(comment=(ML_COMMENT|SL_COMMENT))? | |||
name=XLABEL predicate=STRING | |||
; | |||
XAction returns emachine::Action: | |||
{emachine::Action} | |||
(comment=(ML_COMMENT|SL_COMMENT))? | |||
name=XLABEL action=STRING | |||
; | |||
== Converting Rodin files to Event-B XText == | == Converting Rodin files to Event-B XText == | ||
Revision as of 17:54, 4 November 2016
Introduction
The Event-B XText front-end provides text editors for XContexts and and XMachines which then compiled automatically to Event-B contexts and machines.
For more details about the principles of this editor, see the Event-B XText Front-end page.
Installation
Setup
- Before install the Event-B XText front-end, you need to add the XText update site (http://download.eclipse.org/modeling/tmf/xtext/updates/composite/releases/) as an additional software site.
- The Event-B XText front-end is available as a separate plug-in from the main Rodin update site (under 'Editors' category)
Release Notes
See Event-B XText Front-end Release Notes
IMPORTANT
- Currently, Event-B XText front-end ONLY supports "standard" Event-B machines and contexts.
- Since the XContexts and XMachines are compiled to the Rodin files, the corresponding Rodin contexts and machines will be OVER-WRITTEN. Any changes in the Rodin files will not be lost.
- DO NOT USE the Event-B XText Front-end if you use modelling plug-ins such as iUML-B state-machines and class-diagrams, as the additional modelling elements will be over-written.
Configuration
Event-B Explorer
By default, XContext files (extension bucx) and XMachine files (extension bumx) are not display in the Event-B Explorer. To enable this, select Customize view for Event-B Explorer and uncheck the option All files and folders.
Editing
XContext
- Any file with extension *.bucx will be recognised as XContext file. As a result, XContext file can be created by the standard New File wizard of Eclipse.
- The XText syntax of XContext file is as follows.
XContext returns econtext::Context:
{econtext::Context}
(comment=(ML_COMMENT | SL_COMMENT))?
'context' name=ID
('extends' extends+=[econtext::Context]+)?
('sets' sets+=XCarrierSet+)?
('constants' constants+=XConstant+)?
('axioms' axioms+=XAxiom+)?
'end'
;
XCarrierSet returns econtext::CarrierSet:
{econtext::CarrierSet}
(comment=(ML_COMMENT | SL_COMMENT))?
name=ID
;
XConstant returns econtext::Constant:
{econtext::Constant}
(comment=(ML_COMMENT | SL_COMMENT))?
name=ID
;
XAxiom returns econtext::Axiom:
{econtext::Axiom}
(comment=(ML_COMMENT | SL_COMMENT))?
name=XLABEL predicate=STRING (theorem?='theorem')?
;
terminal XLABEL returns ecore::EString:
'@' !(':')+ ':'
;
XMachine
- Any file with extension *.bumx will be recognised as XMachine file. As a result, XMachine file can be created by the standard New File wizard of Eclipse.
- The XText syntax of XMachine file is as follows.
XMachine returns emachine::Machine:
{emachine::Machine}
(comment=(ML_COMMENT|SL_COMMENT))?
'machine' name=ID
('refines' refines+=[emachine::Machine])?
('sees' sees+=[econtext::Context]+)?
('variables' variables+=XVariable+)?
('invariants' invariants+=XInvariant+)?
('variant' variant=XVariant)?
('events' events+=XEvent (';' events+=XEvent)*)?
('end')
;
XVariable returns emachine::Variable:
{emachine::Variable}
(comment=(ML_COMMENT|SL_COMMENT))?
name=ID
;
XInvariant returns emachine::Invariant:
{emachine::Invariant}
(comment=(ML_COMMENT|SL_COMMENT))?
name=XLABEL predicate=STRING (theorem?='theorem')?
;
terminal XLABEL returns ecore::EString:
'@' !(':')+ ':'
;
XVariant returns emachine::Variant:
{emachine::Variant}
(comment=(ML_COMMENT|SL_COMMENT))?
expression=STRING
;
XEvent returns emachine::Event:
{emachine::Event}
(comment=(ML_COMMENT|SL_COMMENT))?
name=ID
(
(extended?='extended')? &
(convergence=XConvergence)?
)
('refines' refines+=[emachine::Event]+)?
(
('with' witnesses+=XWitness+)?
'begin'
actions+=XAction+
'end'
|
'when'
guards+=XGuard+
('with' witnesses+=XWitness+)?
('then'
actions+=XAction+)?
'end'
|
'any'
parameters+=XParameter+
'where'
guards+=XGuard+
('with' witnesses+=XWitness+)?
('then'
actions+=XAction+)?
'end'
)?
;
enum XConvergence returns emachine::Convergence:
ordinary = 'ordinary' | convergent = 'convergent' | anticipated = 'anticipated';
XParameter returns emachine::Parameter:
{emachine::Parameter}
(comment=(ML_COMMENT|SL_COMMENT))?
name=ID
;
XGuard returns emachine::Guard:
{emachine::Guard}
(comment=(ML_COMMENT|SL_COMMENT))?
name=XLABEL predicate=STRING (theorem?='theorem')?
;
XWitness returns emachine::Witness:
{emachine::Witness}
(comment=(ML_COMMENT|SL_COMMENT))?
name=XLABEL predicate=STRING
;
XAction returns emachine::Action:
{emachine::Action}
(comment=(ML_COMMENT|SL_COMMENT))?
name=XLABEL action=STRING
;