|
#
|
Specification
|
Implementation
|
Comment
|
Reason
|
|
1
|
<topLevel> ::= <import>* <unit_element>*
|
unit_element -> _import
|
Opposed
to the spec, imports can be used as top-level transformation elements not necessarily
in the beginning of a unit
|
Legacy
support.
|
|
2
|
<import> ::= 'from' <unit> 'import' (<identifier_list> | '*') ';'
|
NA
|
|
Not
implemented yet.
|
|
3
|
<unit_element> ::= <access_decl>
|
NA
|
|
Weird
construction strange occurrance
|
|
4
|
<access_decl> ::= <access_usage>
';'
|
NA
|
|
|
5
|
<module_element> ::= <access_decl>
|
NA
|
|
|
6
|
Metamodel-related
rules (<metamodel> ::=
<metamodel_decl> | <metamodel_def>,
etc.)
|
NA
|
|
Not
implemented yet.
|
|
7
|
Constructor-related
rules (<constructor> ::= <constructor_decl>
| <constructor_def>, etc)
|
NA
|
|
|
8
|
Tag-related
rules
|
NA
|
|
|
9
|
Typedef-related
rules
|
NA
|
|
|
10
|
<transformation_h> ::= <qualifier>*
'transformation' <identifier> <transformation_signature>
<transformation_usage_refine>?
|
transformation_h ::= qualifierList transformation qualifiedNameCS transformation_signature
transformation_usage_refineOpt
|
Transformation
name can be a FQN opposed to the spec
|
Legacy
support.
|
|
11
|
<transformation_usage_refine> ::= <module_usage>
|
transformation_usage_refine -> module_usageList
|
Access
and extends keywords in a module header can be used (together) several times
according to the examples in the spec.
|
EBNF
error in the spec.
|
|
12
|
<transformation_refine> ::= 'refines' <moduleref>
|
Allowed
by grammar but unsupported in QVTO
|
|
Unclear
how to resolve.
|
|
13
|
<library_h> ::= 'library' <identifier>
<library_signature>? <module_usage>?
|
See items
10 and 11
|
|
14
|
Scoped_identifier-related rules
|
Scoped_identifiers are used for context-typed identifiers and pathNameCS
for ::-separated FQNs
|
|
|
|
15
|
<declarator> ::= <typespec> <init_part>?
|
<scoped_identifier> ':' <typespec> <init_part>?
|
declarator ::= IDENTIFIER ':' typeCS
declarator ::= IDENTIFIER ':' typeCS '=' oclExpressionCS
declarator ::= IDENTIFIER ':' typeCS ':=' oclExpressionCS
declarator ::= IDENTIFIER ':=' oclExpressionCS
|
Strange declarator rule: <typespec>
<init_part>?
And init_part can be also contain ::= operator, which is
used in specific constructions
|
EBNF
error in the spec.
|
|
|
|
|
|
|
|
16
|
<simple_declarator>, <simple_declarator_list>,
<declarator_vsep> ,<multi_declarator_vsep>
|
NA
|
Needed in
<iterator_exp> only which was implemented
differently.
|
EBNF
error in the spec.
|
|
17
|
<complex_type>
|
NA
|
|
MDT OCL implementation
|
|
18
|
Properties in
transformation section
|
Completely
different based on the corresponding spec sections
|
Weird
rules
|
EBNF
error in the spec.
|
|
19
|
Helpers
and quiries
|
|
Grammar
supports different notations for both but currently there is no semantic difference.
|
Not
implemented yet.
|
|
20
|
<helper_decl> ::= <helper_header>
';'
<entry_decl> ::= <entry_header>
';'
<mapping_decl> ::= <mapping_full_header>
';'
|
Supported
in grammar only
|
Black-box
operations declared in QVT script
|
Not
implemented yet. AFAIU, the operation bodies are to be available at linkage
time.
|
|
21
|
<mapping_full_header> ::= <mapping_header> <when>? <where>?
|
<mapping_full_header> ::= <mapping_header> <when>?
|
Where-clause
purpose/behaviour is unclear.
|
Unclear
how to resolve.
|
|
22
|
<mapping_refinement>-related rules
|
NA
|
|
Unclear
how to resolve.
|
|
23
|
<when> ::= 'when' <expression_block>
|
_when ::=
when '{' oclExpressionCS semicolonOpt
'}'
|
The
implementation allows to have a single OCL
expression in when-clause only.
|
Unclear
how to behave in case of multiple expressions and in case of QVT expressions
(statements assignments, etc.).
|
|
24
|
Expressions
section
|
Multiple
deviations
|
|
MDT OCL implementation and weird rules
|
|
25
|
<assign_op> := '::='
|
NA
|
|
Not
implemented yet.
|
|
26
|
<default_val>? in assignments
|
NA
|
|
|
27
|
<assign_op> := '-='
|
NA
|
|
|
28
|
<assign_exp> ::= <unary_exp> <assign_op>
<expression_block> <default_val>?
|
NA
|
Compound
assignments
|
Unclear
how to resolve.
|
|
29
|
<cmp_op> ::= '=='
|
NA
|
|
Not
implemented yet.
|
|
30
|
<mult_op> ::= '%'
|
NA
|
|
|
31
|
<unary_op> ::= '#' | '##' | '*'
|
NA
|
|
|
32
|
Multiple iterator variables in iterator
expressions
|
Syntactically
supported, though in AST only the first (or first and second) variables are
used
|
|
MDT OCL implementation
|
|
33
|
<access_op> ::= '!->'
|
NA
|
|
Not
implemented yet.
|
|
34
|
elif-part of IfExp
|
NA
|
|
|
35
|
xmap
|
Syntactically
supported, though currently has no difference with map
|
|
|
36
|
<quit_exp> ::= 'break' | 'continue
|
NA
|
|
|
37
|
<try_exp> ::= 'try' <expression_block>
<except>+
<except> ::= 'except' '(' <scoped_identifier_list>
')' <expression_block>
<raise_exp> ::=
'raise' <scoped_identifier> ('(' <arg_list>? ')')?
|
NA
|
|
|
38
|
<do_exp> ::= 'do' <expression_block>
|
NA
|
|
|
39
|
Mutable
collections support
|
|
|
Tentative
status
|
|
40
|
NA
|
Legacy
library import
|
import
library ...
|
Legacy
support.
|
|
41
|
NA
|
Legacy
transformation header
|
Without
signature or at least parentheses ()
|
|
42
|
NA
|
Legacy modeltype declaration
|
metamodel URI
|
|
43
|
NA
|
Legacy renamings
|
rename
... to be replaced by tags
|
|
44
|
NA
|
Legacy
while-loop
|
while '('
oclExpressionCS ';' oclExpressionCS
')' whileBodyCS
|
|
45
|
Double-quoted
string literals
|
Found in
QVTO spec samples.
|
Tentative
status
|
|
46
|
imperative
operation qualifiers
|
Supported
in syntax only
|
|
Not
implemented yet.
|
|
47
|
<param_direction> ::= 'out'
|
NA
|
Also
consider out contexts.
|
|
|
|
|
|
|
|
|
|
|
|
|