|
#
|
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
|
Double-quoted
string literals
|
Found in
QVTO spec samples.
|
Tentative
status
|
|
45
|
imperative
operation qualifiers
|
Supported
in syntax only
|
|
Not
implemented yet.
|
|
46
|
<param_direction>
::= 'out'
|
NA
|
Also
consider ‘out’ contexts.
|
|
|
|
|
|
|
|
|
|
|
|
|