Skip to main content
aboutsummaryrefslogtreecommitdiffstats
blob: 246aab5007ff91eb79629ff79aa8c449c5dd28c3 (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
89
90
91
92
93
94
95
96
97
98
99
/*****************************************************************************
 * Copyright (c) 2010 CEA LIST.
 *
 *    
 * 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:
 *  CEA LIST - Initial API and implementation
 *
 *****************************************************************************/

grammar org.eclipse.papyrus.uml.textedit.port.xtext.UmlPort with org.eclipse.papyrus.uml.alf.Common

import "http://www.eclipse.org/uml2/5.0.0/UML" as uml
import "http://www.eclipse.org/emf/2002/Ecore" as ecore


generate umlPort "http://www.eclipse.org/papyrus/uml/textedit/port/xtext/UmlPort"

PortRule:
	(visibility = VisibilityRule)?
	(derived ?= "/")?
	name=ID (':' (conjugated ?= "~")? (type=TypeRule | typeUndefined?="<Undefined>"))?
	(multiplicity = MultiplicityRule) ? 
	(modifiers = ModifiersRule) ? 
	(default = DefaultValueRule) ? ;

enum VisibilityKind:
	public = "+"
	| private = "-"
	| protected = "#"
	| package = "~" 
;

VisibilityRule:
	visibility = VisibilityKind
;

TypeRule :
	(path=QualifiedName)? type=[uml::Classifier] ;

QualifiedName :
	path=[uml::Namespace]'::' (remaining=QualifiedName)? ; 
	
MultiplicityRule:
	"[" (bounds+=BoundSpecification '..')? bounds+=BoundSpecification "]" ;

BoundSpecification:
	value = (UnlimitedLiteral | StringLiteral) ;

UnlimitedLiteral : INT |'*';

StringLiteral : STRING;

ModifiersRule:
	{ModifiersRule}'{' (values += ModifierSpecification (',' values += ModifierSpecification)*)? '}';

ModifierSpecification:
	value = ModifierKind 
	| redefines = RedefinesRule 
	| subsets = SubsetsRule ;

enum ModifierKind:
	readOnly = "readOnly" 
	| union = "union" 
	| ordered = "ordered" 
	| unique = "unique" ;

RedefinesRule :
	'redefines' port = [uml::Port] ;

SubsetsRule :
	'subsets' port = [uml::Port] ;

DefaultValueRule :
	'=' default = Value ;
	
Value : IntValue | StringValue | BooleanValue | RealValue | NullValue | NoValue;

IntValue : literalInteger = INT;

StringValue : literalString = STRING;

enum BooleanLiterals:
	TRUE = "true" |
	FALSE = "false"
;

BooleanValue : literalBoolean = BooleanLiterals;

//TODO: Support all Java-compliant doubles
RealValue : integer = INT '.' | '.' fraction = INT | integer = INT "." fraction = INT;

NullValue : {NullValue}'null';

NoValue : {NoValue}'none';

Back to the top