expressir 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/demo.rb +3 -1
  3. data/expressir.gemspec +1 -1
  4. data/lib/expressir/express.rb +0 -1
  5. data/lib/expressir/express_exp/generated/ExpressLexer.rb +235 -232
  6. data/lib/expressir/express_exp/generated/ExpressParser.rb +1461 -1435
  7. data/lib/expressir/express_exp/parser.rb +8 -3
  8. data/lib/expressir/express_exp/visitor.rb +167 -136
  9. data/lib/expressir/model.rb +91 -0
  10. data/lib/expressir/model/constant.rb +2 -0
  11. data/lib/expressir/model/derived.rb +4 -0
  12. data/lib/expressir/model/entity.rb +12 -0
  13. data/lib/expressir/model/enumeration_item.rb +13 -0
  14. data/lib/expressir/model/explicit.rb +4 -0
  15. data/lib/expressir/model/expressions/aggregate_initializer.rb +13 -0
  16. data/lib/expressir/model/expressions/query.rb +8 -0
  17. data/lib/expressir/model/function.rb +31 -0
  18. data/lib/expressir/model/inverse.rb +4 -0
  19. data/lib/expressir/model/literals/binary.rb +13 -0
  20. data/lib/expressir/model/literals/integer.rb +13 -0
  21. data/lib/expressir/model/literals/logical.rb +13 -0
  22. data/lib/expressir/model/literals/real.rb +13 -0
  23. data/lib/expressir/model/literals/string.rb +15 -0
  24. data/lib/expressir/model/local.rb +2 -0
  25. data/lib/expressir/model/parameter.rb +2 -0
  26. data/lib/expressir/model/procedure.rb +31 -0
  27. data/lib/expressir/model/repository.rb +6 -0
  28. data/lib/expressir/model/rule.rb +31 -0
  29. data/lib/expressir/model/schema.rb +10 -0
  30. data/lib/expressir/model/statements/alias.rb +8 -0
  31. data/lib/expressir/model/statements/case_action.rb +2 -2
  32. data/lib/expressir/model/statements/if.rb +2 -2
  33. data/lib/expressir/model/statements/repeat.rb +10 -2
  34. data/lib/expressir/model/subtype_constraint.rb +2 -0
  35. data/lib/expressir/model/type.rb +8 -0
  36. data/lib/expressir/model/types/aggregate.rb +2 -0
  37. data/lib/expressir/model/types/enumeration.rb +4 -4
  38. data/lib/expressir/model/types/generic.rb +2 -0
  39. data/lib/expressir/model/types/generic_entity.rb +2 -0
  40. data/lib/expressir/model/types/select.rb +4 -4
  41. data/lib/expressir/model/unique.rb +2 -0
  42. data/lib/expressir/model/where.rb +2 -0
  43. data/lib/expressir/version.rb +1 -1
  44. data/original/examples/syntax/remark.exp +127 -0
  45. data/original/examples/syntax/syntax.exp +15 -10
  46. data/spec/expressir/express_exp/remark_spec.rb +301 -0
  47. data/spec/expressir/express_exp/syntax_spec.rb +659 -307
  48. metadata +15 -6
  49. data/lib/expressir/model/expressions/unknown.rb +0 -8
@@ -8,6 +8,7 @@ module Expressir
8
8
  attr_accessor :locals
9
9
  attr_accessor :where
10
10
  attr_accessor :statements
11
+ attr_accessor :remarks
11
12
 
12
13
  def initialize(options = {})
13
14
  @id = options[:id]
@@ -17,6 +18,36 @@ module Expressir
17
18
  @locals = options[:locals]
18
19
  @where = options[:where]
19
20
  @statements = options[:statements]
21
+ @remarks = options[:remarks]
22
+ end
23
+
24
+ def types
25
+ @declarations.select{|x| x.instance_of? Expressir::Model::Type}
26
+ end
27
+
28
+ def entities
29
+ @declarations.select{|x| x.instance_of? Expressir::Model::Entity}
30
+ end
31
+
32
+ def subtype_constraints
33
+ @declarations.select{|x| x.instance_of? Expressir::Model::SubtypeConstraint}
34
+ end
35
+
36
+ def functions
37
+ @declarations.select{|x| x.instance_of? Expressir::Model::Function}
38
+ end
39
+
40
+ def procedures
41
+ @declarations.select{|x| x.instance_of? Expressir::Model::Procedure}
42
+ end
43
+
44
+ def scope_items
45
+ items = []
46
+ items.push(*@declarations) if @declarations
47
+ items.push(*@constants) if @constants
48
+ items.push(*@locals) if @locals
49
+ items.push(*@where) if @where
50
+ items
20
51
  end
21
52
  end
22
53
  end
@@ -7,6 +7,7 @@ module Expressir
7
7
  attr_accessor :constants
8
8
  attr_accessor :declarations
9
9
  attr_accessor :rules
10
+ attr_accessor :remarks
10
11
 
11
12
  def initialize(options = {})
12
13
  @id = options[:id]
@@ -15,6 +16,7 @@ module Expressir
15
16
  @constants = options[:constants]
16
17
  @declarations = options[:declarations]
17
18
  @rules = options[:rules]
19
+ @remarks = options[:remarks]
18
20
  end
19
21
 
20
22
  def types
@@ -36,6 +38,14 @@ module Expressir
36
38
  def procedures
37
39
  @declarations.select{|x| x.instance_of? Expressir::Model::Procedure}
38
40
  end
41
+
42
+ def scope_items
43
+ items = []
44
+ items.push(*@constants) if @constants
45
+ items.push(*@declarations) if @declarations
46
+ items.push(*@rules) if @rules
47
+ items
48
+ end
39
49
  end
40
50
  end
41
51
  end
@@ -5,11 +5,19 @@ module Expressir
5
5
  attr_accessor :id
6
6
  attr_accessor :expression
7
7
  attr_accessor :statements
8
+ attr_accessor :remarks
8
9
 
9
10
  def initialize(options = {})
10
11
  @id = options[:id]
11
12
  @expression = options[:expression]
12
13
  @statements = options[:statements]
14
+ @remarks = options[:remarks]
15
+ end
16
+
17
+ def scope_items
18
+ items = []
19
+ items.push(self)
20
+ items
13
21
  end
14
22
  end
15
23
  end
@@ -2,11 +2,11 @@ module Expressir
2
2
  module Model
3
3
  module Statements
4
4
  class CaseAction
5
- attr_accessor :label
5
+ attr_accessor :expression
6
6
  attr_accessor :statement
7
7
 
8
8
  def initialize(options = {})
9
- @label = options[:label]
9
+ @expression = options[:expression]
10
10
  @statement = options[:statement]
11
11
  end
12
12
  end
@@ -2,12 +2,12 @@ module Expressir
2
2
  module Model
3
3
  module Statements
4
4
  class If
5
- attr_accessor :condition
5
+ attr_accessor :expression
6
6
  attr_accessor :statements
7
7
  attr_accessor :else_statements
8
8
 
9
9
  def initialize(options = {})
10
- @condition = options[:condition]
10
+ @expression = options[:expression]
11
11
  @statements = options[:statements]
12
12
  @else_statements = options[:else_statements]
13
13
  end
@@ -2,22 +2,30 @@ module Expressir
2
2
  module Model
3
3
  module Statements
4
4
  class Repeat
5
- attr_accessor :variable
5
+ attr_accessor :id
6
6
  attr_accessor :bound1
7
7
  attr_accessor :bound2
8
8
  attr_accessor :increment
9
9
  attr_accessor :while_expression
10
10
  attr_accessor :until_expression
11
11
  attr_accessor :statements
12
+ attr_accessor :remarks
12
13
 
13
14
  def initialize(options = {})
14
- @variable = options[:variable]
15
+ @id = options[:id]
15
16
  @bound1 = options[:bound1]
16
17
  @bound2 = options[:bound2]
17
18
  @increment = options[:increment]
18
19
  @while_expression = options[:while_expression]
19
20
  @until_expression = options[:until_expression]
20
21
  @statements = options[:statements]
22
+ @remarks = options[:remarks]
23
+ end
24
+
25
+ def scope_items
26
+ items = []
27
+ items.push(self)
28
+ items
21
29
  end
22
30
  end
23
31
  end
@@ -6,6 +6,7 @@ module Expressir
6
6
  attr_accessor :abstract_supertype
7
7
  attr_accessor :total_over
8
8
  attr_accessor :subtype_expression
9
+ attr_accessor :remarks
9
10
 
10
11
  def initialize(options = {})
11
12
  @id = options[:id]
@@ -13,6 +14,7 @@ module Expressir
13
14
  @abstract_supertype = options[:abstract_supertype]
14
15
  @total_over = options[:total_over]
15
16
  @subtype_expression = options[:subtype_expression]
17
+ @remarks = options[:remarks]
16
18
  end
17
19
  end
18
20
  end
@@ -4,11 +4,19 @@ module Expressir
4
4
  attr_accessor :id
5
5
  attr_accessor :type
6
6
  attr_accessor :where
7
+ attr_accessor :remarks
7
8
 
8
9
  def initialize(options = {})
9
10
  @id = options[:id]
10
11
  @type = options[:type]
11
12
  @where = options[:where]
13
+ @remarks = options[:remarks]
14
+ end
15
+
16
+ def scope_items
17
+ items = []
18
+ items.push(*@where) if @where
19
+ items
12
20
  end
13
21
  end
14
22
  end
@@ -4,10 +4,12 @@ module Expressir
4
4
  class Aggregate
5
5
  attr_accessor :label
6
6
  attr_accessor :base_type
7
+ attr_accessor :remarks
7
8
 
8
9
  def initialize(options = {})
9
10
  @label = options[:label]
10
11
  @base_type = options[:base_type]
12
+ @remarks = options[:remarks]
11
13
  end
12
14
  end
13
15
  end
@@ -3,15 +3,15 @@ module Expressir
3
3
  module Types
4
4
  class Enumeration
5
5
  attr_accessor :extensible
6
- attr_accessor :list
6
+ attr_accessor :items
7
7
  attr_accessor :extension_type
8
- attr_accessor :extension_list
8
+ attr_accessor :extension_items
9
9
 
10
10
  def initialize(options = {})
11
11
  @extensible = options[:extensible]
12
- @list = options[:list]
12
+ @items = options[:items]
13
13
  @extension_type = options[:extension_type]
14
- @extension_list = options[:extension_list]
14
+ @extension_items = options[:extension_items]
15
15
  end
16
16
  end
17
17
  end
@@ -3,9 +3,11 @@ module Expressir
3
3
  module Types
4
4
  class Generic
5
5
  attr_accessor :label
6
+ attr_accessor :remarks
6
7
 
7
8
  def initialize(options = {})
8
9
  @label = options[:label]
10
+ @remarks = options[:remarks]
9
11
  end
10
12
  end
11
13
  end
@@ -3,9 +3,11 @@ module Expressir
3
3
  module Types
4
4
  class GenericEntity
5
5
  attr_accessor :label
6
+ attr_accessor :remarks
6
7
 
7
8
  def initialize(options = {})
8
9
  @label = options[:label]
10
+ @remarks = options[:remarks]
9
11
  end
10
12
  end
11
13
  end
@@ -4,16 +4,16 @@ module Expressir
4
4
  class Select
5
5
  attr_accessor :extensible
6
6
  attr_accessor :generic_entity
7
- attr_accessor :list
7
+ attr_accessor :items
8
8
  attr_accessor :extension_type
9
- attr_accessor :extension_list
9
+ attr_accessor :extension_items
10
10
 
11
11
  def initialize(options = {})
12
12
  @extensible = options[:extensible]
13
13
  @generic_entity = options[:generic_entity]
14
- @list = options[:list]
14
+ @items = options[:items]
15
15
  @extension_type = options[:extension_type]
16
- @extension_list = options[:extension_list]
16
+ @extension_items = options[:extension_items]
17
17
  end
18
18
  end
19
19
  end
@@ -3,10 +3,12 @@ module Expressir
3
3
  class Unique
4
4
  attr_accessor :id
5
5
  attr_accessor :attributes
6
+ attr_accessor :remarks
6
7
 
7
8
  def initialize(options = {})
8
9
  @id = options[:id]
9
10
  @attributes = options[:attributes]
11
+ @remarks = options[:remarks]
10
12
  end
11
13
  end
12
14
  end
@@ -3,10 +3,12 @@ module Expressir
3
3
  class Where
4
4
  attr_accessor :id
5
5
  attr_accessor :expression
6
+ attr_accessor :remarks
6
7
 
7
8
  def initialize(options = {})
8
9
  @id = options[:id]
9
10
  @expression = options[:expression]
11
+ @remarks = options[:remarks]
10
12
  end
11
13
  end
12
14
  end
@@ -1,3 +1,3 @@
1
1
  module Expressir
2
- VERSION = "0.2.0".freeze
2
+ VERSION = "0.2.1".freeze
3
3
  end
@@ -0,0 +1,127 @@
1
+ --"remarkSchema" universal scope - schema before
2
+
3
+ SCHEMA remarkSchema;
4
+
5
+ CONSTANT remarkConstant : STRING := 'xxx'; END_CONSTANT;
6
+ TYPE remarkType = STRING; END_TYPE;
7
+ ENTITY remarkEntity;
8
+ remarkExplicit : STRING;
9
+ DERIVE remarkDerived : STRING := 'xxx';
10
+ INVERSE remarkInverse : remarkEntity FOR remarkExplicit;
11
+ UNIQUE remarkUnique : remarkExplicit;
12
+ WHERE remarkWhere : TRUE;
13
+ --"remarkExplicit" entity scope - entity explicit
14
+ --"remarkDerived" entity scope - entity derived
15
+ --"remarkInverse" entity scope - entity inverse
16
+ --"remarkUnique" entity scope - entity unique
17
+ --"remarkWhere" entity scope - entity where
18
+ END_ENTITY;
19
+ SUBTYPE_CONSTRAINT remarkSubtypeConstraint FOR remarkEntity; END_SUBTYPE_CONSTRAINT;
20
+ FUNCTION remarkFunction (remarkParameter : STRING) : BOOLEAN;
21
+ TYPE remarkType = STRING; END_TYPE;
22
+ CONSTANT remarkConstant : STRING := 'xxx'; END_CONSTANT;
23
+ LOCAL remarkLocal : STRING; END_LOCAL;
24
+ ALIAS remarkAlias FOR remarkLocal; ;
25
+ --"remarkAlias" function alias scope - function alias
26
+ END_ALIAS;
27
+ REPEAT remarkRepeat := 1 TO 9; ;
28
+ --"remarkRepeat" function repeat scope - function repeat
29
+ END_REPEAT;
30
+ remarkLocal := QUERY(remarkQuery <* remarkLocal | TRUE
31
+ --"remarkQuery" function query scope - function query
32
+ );
33
+ --"remarkParameter" function scope - function parameter
34
+ --"remarkType" function scope - function type
35
+ --"remarkConstant" function scope - function constant
36
+ --"remarkLocal" function scope - function local
37
+ END_FUNCTION;
38
+ PROCEDURE remarkProcedure (remarkParameter : STRING);
39
+ TYPE remarkType = STRING; END_TYPE;
40
+ CONSTANT remarkConstant : STRING := 'xxx'; END_CONSTANT;
41
+ LOCAL remarkLocal : STRING; END_LOCAL;
42
+ ALIAS remarkAlias FOR remarkLocal; ;
43
+ --"remarkAlias" procedure alias scope - procedure alias
44
+ END_ALIAS;
45
+ REPEAT remarkRepeat := 1 TO 9; ;
46
+ --"remarkRepeat" procedure repeat scope - procedure repeat
47
+ END_REPEAT;
48
+ remarkLocal := QUERY(remarkQuery <* remarkLocal | TRUE
49
+ --"remarkQuery" procedure query scope - procedure query
50
+ );
51
+ --"remarkParameter" procedure scope - procedure parameter
52
+ --"remarkType" procedure scope - procedure type
53
+ --"remarkConstant" procedure scope - procedure constant
54
+ --"remarkLocal" procedure scope - procedure local
55
+ END_PROCEDURE;
56
+ RULE remarkRule FOR (remarkEntity);
57
+ TYPE remarkType = STRING; END_TYPE;
58
+ CONSTANT remarkConstant : STRING := 'xxx'; END_CONSTANT;
59
+ LOCAL remarkLocal : STRING; END_LOCAL;
60
+ ALIAS remarkAlias FOR remarkLocal; ;
61
+ --"remarkAlias" rule alias scope - rule alias
62
+ END_ALIAS;
63
+ REPEAT remarkRepeat := 1 TO 9; ;
64
+ --"remarkRepeat" rule repeat scope - rule repeat
65
+ END_REPEAT;
66
+ remarkLocal := QUERY(remarkQuery <* remarkLocal | TRUE
67
+ --"remarkQuery" rule query scope - rule query
68
+ );
69
+ WHERE remarkWhere : TRUE;
70
+ --"remarkType" rule scope - rule type
71
+ --"remarkConstant" rule scope - rule constant
72
+ --"remarkLocal" rule scope - rule local
73
+ --"remarkWhere" rule scope - rule where
74
+ END_RULE;
75
+
76
+ --"remarkConstant" schema scope - constant
77
+ --"remarkType" schema scope - type
78
+ --"remarkEntity" schema scope - entity
79
+ --"remarkEntity.remarkExplicit" schema scope - entity explicit
80
+ --"remarkEntity.remarkDerived" schema scope - entity derived
81
+ --"remarkEntity.remarkInverse" schema scope - entity inverse
82
+ --"remarkEntity.remarkUnique" schema scope - entity unique
83
+ --"remarkEntity.remarkWhere" schema scope - entity where
84
+ --"remarkSubtypeConstraint" schema scope - subtype constraint
85
+ --"remarkFunction" schema scope - function
86
+ --"remarkFunction.remarkParameter" schema scope - function parameter
87
+ --"remarkFunction.remarkType" schema scope - function type
88
+ --"remarkFunction.remarkConstant" schema scope - function constant
89
+ --"remarkFunction.remarkLocal" schema scope - function local
90
+ --"remarkProcedure" schema scope - procedure
91
+ --"remarkProcedure.remarkParameter" schema scope - procedure parameter
92
+ --"remarkProcedure.remarkType" schema scope - procedure type
93
+ --"remarkProcedure.remarkConstant" schema scope - procedure constant
94
+ --"remarkProcedure.remarkLocal" schema scope - procedure local
95
+ --"remarkRule" schema scope - rule
96
+ --"remarkRule.remarkType" schema scope - rule type
97
+ --"remarkRule.remarkConstant" schema scope - rule constant
98
+ --"remarkRule.remarkLocal" schema scope - rule local
99
+ --"remarkRule.remarkWhere" schema scope - rule where
100
+
101
+ END_SCHEMA;
102
+
103
+ --"remarkSchema" universal scope - schema
104
+ --"remarkSchema.remarkConstant" universal scope - constant
105
+ --"remarkSchema.remarkType" universal scope - type
106
+ --"remarkSchema.remarkEntity" universal scope - entity
107
+ --"remarkSchema.remarkEntity.remarkExplicit" universal scope - entity explicit
108
+ --"remarkSchema.remarkEntity.remarkDerived" universal scope - entity derived
109
+ --"remarkSchema.remarkEntity.remarkInverse" universal scope - entity inverse
110
+ --"remarkSchema.remarkEntity.remarkUnique" universal scope - entity unique
111
+ --"remarkSchema.remarkEntity.remarkWhere" universal scope - entity where
112
+ --"remarkSchema.remarkSubtypeConstraint" universal scope - subtype constraint
113
+ --"remarkSchema.remarkFunction" universal scope - function
114
+ --"remarkSchema.remarkFunction.remarkParameter" universal scope - function parameter
115
+ --"remarkSchema.remarkFunction.remarkType" universal scope - function type
116
+ --"remarkSchema.remarkFunction.remarkConstant" universal scope - function constant
117
+ --"remarkSchema.remarkFunction.remarkLocal" universal scope - function local
118
+ --"remarkSchema.remarkProcedure" universal scope - procedure
119
+ --"remarkSchema.remarkProcedure.remarkParameter" universal scope - procedure parameter
120
+ --"remarkSchema.remarkProcedure.remarkType" universal scope - procedure type
121
+ --"remarkSchema.remarkProcedure.remarkConstant" universal scope - procedure constant
122
+ --"remarkSchema.remarkProcedure.remarkLocal" universal scope - procedure local
123
+ --"remarkSchema.remarkRule" universal scope - rule
124
+ --"remarkSchema.remarkRule.remarkType" universal scope - rule type
125
+ --"remarkSchema.remarkRule.remarkConstant" universal scope - rule constant
126
+ --"remarkSchema.remarkRule.remarkLocal" universal scope - rule local
127
+ --"remarkSchema.remarkRule.remarkWhere" universal scope - rule where
@@ -12,12 +12,12 @@ CONSTANT
12
12
  -- literals
13
13
  binaryExpression : STRING := %011110000111100001111000;
14
14
  integerExpression : STRING := 999;
15
- logicalTrueExpression : STRING := TRUE;
16
- logicalFalseExpression : STRING := FALSE;
17
- logicalUnknownExpression : STRING := UNKNOWN;
15
+ trueLogicalExpression : STRING := TRUE;
16
+ falseLogicalExpression : STRING := FALSE;
17
+ unknownLogicalExpression : STRING := UNKNOWN;
18
18
  realExpression : STRING := 999.999;
19
- stringSimpleExpression : STRING := 'xxx';
20
- stringEncodedExpression : STRING := "000000780000007800000078";
19
+ simpleStringExpression : STRING := 'xxx';
20
+ encodedStringExpression : STRING := "000000780000007800000078";
21
21
 
22
22
  -- constants
23
23
  constEExpression : STRING := CONST_E;
@@ -93,10 +93,10 @@ CONSTANT
93
93
  likeExpression : STRING := 'xxx' LIKE 'xxx';
94
94
 
95
95
  -- aggregate initializers
96
- aggregateExpression : STRING := ['xxx'];
97
- aggregateRepeatedExpression : STRING := ['xxx' : 2];
98
- aggregateComplexExpression : STRING := [4 + 2];
99
- aggregateComplexRepeatedExpression : STRING := [4 + 2 : 4 + 2];
96
+ aggregateInitializerExpression : STRING := ['xxx'];
97
+ repeatedAggregateInitializerExpression : STRING := ['xxx' : 2];
98
+ complexAggregateInitializerExpression : STRING := [4 + 2];
99
+ complexRepeatedAggregateInitializerExpression : STRING := [4 + 2 : 4 + 2];
100
100
 
101
101
  -- entity constructors
102
102
  entityConstructorExpression : STRING := explicitAttributeEntity(TRUE);
@@ -175,14 +175,19 @@ ENTITY explicitAttributeEntity; test : BOOLEAN; END_ENTITY;
175
175
  ENTITY explicitAttributeOptionalEntity; test : OPTIONAL BOOLEAN; END_ENTITY;
176
176
  ENTITY explicitAttributeMultipleEntity; test : BOOLEAN; test2 : BOOLEAN; END_ENTITY;
177
177
  ENTITY explicitAttributeMultipleShorthandEntity; test, test2 : BOOLEAN; END_ENTITY;
178
- ENTITY explicitAttributeRenamedEntity; SELF\explicitAttributeEntity.test RENAMED test2: BOOLEAN; END_ENTITY;
178
+ ENTITY explicitAttributeRedeclaredEntity; SELF\explicitAttributeEntity.test: BOOLEAN; END_ENTITY;
179
+ ENTITY explicitAttributeRedeclaredRenamedEntity; SELF\explicitAttributeEntity.test RENAMED test2: BOOLEAN; END_ENTITY;
179
180
  ENTITY derivedAttributeEntity; DERIVE test : BOOLEAN := TRUE; END_ENTITY;
181
+ ENTITY derivedAttributeRedeclaredEntity; DERIVE SELF\explicitAttributeEntity.test : BOOLEAN := TRUE; END_ENTITY;
182
+ ENTITY derivedAttributeRedeclaredRenamedEntity; DERIVE SELF\explicitAttributeEntity.test RENAMED test2 : BOOLEAN := TRUE; END_ENTITY;
180
183
  ENTITY inverseAttributeEntity; INVERSE test : explicitAttributeEntity FOR test; END_ENTITY;
181
184
  ENTITY inverseAttributeEntityEntity; INVERSE test : explicitAttributeEntity FOR explicitAttributeEntity.test; END_ENTITY;
182
185
  ENTITY inverseAttributeSetEntity; INVERSE test : SET OF explicitAttributeEntity FOR test; END_ENTITY;
183
186
  ENTITY inverseAttributeSetBoundEntity; INVERSE test : SET [1:9] OF explicitAttributeEntity FOR test; END_ENTITY;
184
187
  ENTITY inverseAttributeBagEntity; INVERSE test : BAG OF explicitAttributeEntity FOR test; END_ENTITY;
185
188
  ENTITY inverseAttributeBagBoundEntity; INVERSE test : BAG [1:9] OF explicitAttributeEntity FOR test; END_ENTITY;
189
+ ENTITY inverseAttributeRedeclaredEntity; INVERSE SELF\explicitAttributeEntity.test : explicitAttributeEntity FOR test; END_ENTITY;
190
+ ENTITY inverseAttributeRedeclaredRenamedEntity; INVERSE SELF\explicitAttributeEntity.test RENAMED test2 : explicitAttributeEntity FOR test; END_ENTITY;
186
191
  ENTITY uniqueEntity; UNIQUE test; END_ENTITY;
187
192
  ENTITY uniqueLabelEntity; UNIQUE UR1: test; END_ENTITY;
188
193
  ENTITY uniqueQualifiedEntity; UNIQUE SELF\explicitAttributeEntity.test; END_ENTITY;