QVTO Grammar Deviations from the Specification

 

 

#

 

 

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.