Skip to main content
summaryrefslogtreecommitdiffstats
blob: c3177ac69be84a0d46f6dc8edcaef150e416b1cf (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
/*******************************************************************************
 * Copyright (c) 2011 E.D.Willink and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     E.D.Willink - initial API and implementation
 *******************************************************************************/
grammar org.eclipse.qvtd.xtext.qvtimperative.QVTimperative with org.eclipse.qvtd.xtext.qvtcorebase.QVTcoreBase

import "http://www.eclipse.org/emf/2002/Ecore" as ecore
import "platform:/resource/org.eclipse.ocl.pivot/model/Pivot.ecore" as pivot
import "platform:/resource/org.eclipse.ocl.xtext.base/model/BaseCS.ecore" as base
import "platform:/resource/org.eclipse.ocl.xtext.essentialocl/model/EssentialOCLCS.ecore" as essentialocl
import "platform:/resource/org.eclipse.qvtd.pivot.qvtbase/model/QVTbase.ecore" as qvtbase
import "platform:/resource/org.eclipse.qvtd.pivot.qvtcorebase/model/QVTcoreBase.ecore" as qvtcorebase
import "platform:/resource/org.eclipse.qvtd.pivot.qvtimperative/model/QVTimperative.ecore" as qvtimperative
import "platform:/resource/org.eclipse.qvtd.xtext.qvtcorebase/model/QVTcoreBaseCS.ecore" as qvtcorebasecs
import "platform:/resource/org.eclipse.qvtd.xtext.qvtimperative/model/QVTimperativeCS.ecore"

TopLevelCS:
	ownedImports+=ImportCS*
	(ownedTransformations+=TransformationCS | ownedMappings+=MappingCS | ownedQueries+=QueryCS)*
;
	
DirectionCS returns qvtcorebasecs::DirectionCS : {qvtcorebasecs::DirectionCS} name=UnrestrictedName
	('imports' imports+=[pivot::Package|UnrestrictedName] (',' imports+=[pivot::Package|UnrestrictedName])*)?
	('uses' uses+=[qvtcorebase::CoreDomain|UnrestrictedName] (',' uses+=[qvtcorebase::CoreDomain|UnrestrictedName])*)?
;

MappingCS: {MappingCS} isDefault?='default'? 'map' name=UnrestrictedName ('in' ownedInPathName=PathNameCS)?
	'{' ownedDomains+=(SourceDomainCS | TargetDomainCS)* ('where' ownedMiddle=MiddleDomainCS)? ownedMappingSequence=MappingSequenceCS? '}';
	
MappingCallCS: {MappingCallCS} isInfinite?='infinite'? 'call' referredMapping=[qvtimperative::Mapping|UnrestrictedName]
	'{' ownedBindings+=MappingCallBindingCS* '}';

MappingCallBindingCS: referredVariable=[pivot::Variable|UnrestrictedName] (':='|isPolled?='?=') ownedValue=ExpCS ';';
	
MappingLoopCS: 'for' ownedIterator=MappingIteratorCS 'in' ownedInExpression=ExpCS '{' ownedMappingSequence=MappingSequenceCS '}';
	
MappingIteratorCS returns essentialocl::VariableCS: name=UnrestrictedName (':' ownedType=TypeExpCS)?;

MappingSequenceCS: ownedMappingStatements+=MappingStatementCS+;
	
MappingStatementCS: MappingCallCS | MappingLoopCS;
	
SourceDomainCS returns qvtcorebasecs::DomainCS: isCheck?='check' direction=[qvtbase::TypedModel|UnrestrictedName]
	ownedGuardPattern=SourceGuardPatternCS ownedBottomPattern=SourceBottomPatternCS
;
		
SourceBottomPatternCS returns qvtcorebasecs::BottomPatternCS:
	{qvtcorebasecs::BottomPatternCS} '{''}'
;
	
SourceGuardPatternCS returns qvtcorebasecs::GuardPatternCS:
	{qvtcorebasecs::GuardPatternCS} '(' (ownedUnrealizedVariables+=UnrealizedVariableCS (',' ownedUnrealizedVariables+=UnrealizedVariableCS)*)? ')'
;
	
MiddleDomainCS returns qvtcorebasecs::DomainCS: {qvtcorebasecs::DomainCS} ownedGuardPattern=MiddleGuardPatternCS ownedBottomPattern=MiddleBottomPatternCS;
		
MiddleBottomPatternCS returns qvtcorebasecs::BottomPatternCS:
	( '{' ownedUnrealizedVariables+=UnrealizedVariableCS
		(',' ownedUnrealizedVariables+=UnrealizedVariableCS)*
		('|' ownedConstraints+=PredicateOrAssignmentCS*)? '}'
	)
	| ( {qvtcorebasecs::BottomPatternCS} '{' ownedConstraints+=PredicateOrAssignmentCS* '}'
	)
;
	
MiddleGuardPatternCS returns qvtcorebasecs::GuardPatternCS:
	{qvtcorebasecs::GuardPatternCS} '(' ownedPredicates+=PredicateCS* ')'
;
	
TargetDomainCS returns qvtcorebasecs::DomainCS: isEnforce?='enforce' direction=[qvtbase::TypedModel|UnrestrictedName]
	ownedGuardPattern=TargetGuardPatternCS ownedBottomPattern=TargetBottomPatternCS
;
		
TargetBottomPatternCS returns qvtcorebasecs::BottomPatternCS:
	{qvtcorebasecs::BottomPatternCS} '{' (ownedRealizedVariables+=RealizedVariableCS
		(',' ownedRealizedVariables+=RealizedVariableCS)*)?
	'}'
;
	
TargetGuardPatternCS returns qvtcorebasecs::GuardPatternCS:
	{qvtcorebasecs::GuardPatternCS} '(' (ownedUnrealizedVariables+=UnrealizedVariableCS (',' ownedUnrealizedVariables+=UnrealizedVariableCS)*)? ')'
;

Back to the top