expressir 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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;