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
@@ -0,0 +1,91 @@
1
+ require 'expressir/model/constant'
2
+ require 'expressir/model/derived'
3
+ require 'expressir/model/entity'
4
+ require 'expressir/model/enumeration_item'
5
+ require 'expressir/model/explicit'
6
+ require 'expressir/model/function'
7
+ require 'expressir/model/inverse'
8
+ require 'expressir/model/local'
9
+ require 'expressir/model/parameter'
10
+ require 'expressir/model/procedure'
11
+ require 'expressir/model/ref'
12
+ require 'expressir/model/reference'
13
+ require 'expressir/model/renamed_ref'
14
+ require 'expressir/model/repository'
15
+ require 'expressir/model/rule'
16
+ require 'expressir/model/schema'
17
+ require 'expressir/model/subtype_constraint'
18
+ require 'expressir/model/type'
19
+ require 'expressir/model/unique'
20
+ require 'expressir/model/use'
21
+ require 'expressir/model/where'
22
+ require 'expressir/model/expressions/aggregate_initializer'
23
+ require 'expressir/model/expressions/aggregate_element'
24
+ require 'expressir/model/expressions/attribute_qualifier'
25
+ require 'expressir/model/expressions/entity_constructor'
26
+ require 'expressir/model/expressions/expression'
27
+ require 'expressir/model/expressions/function_call'
28
+ require 'expressir/model/expressions/group_qualifier'
29
+ require 'expressir/model/expressions/index_qualifier'
30
+ require 'expressir/model/expressions/interval'
31
+ require 'expressir/model/expressions/qualified_ref'
32
+ require 'expressir/model/expressions/query'
33
+ require 'expressir/model/literals/binary'
34
+ require 'expressir/model/literals/integer'
35
+ require 'expressir/model/literals/logical'
36
+ require 'expressir/model/literals/real'
37
+ require 'expressir/model/literals/string'
38
+ require 'expressir/model/operators/addition'
39
+ require 'expressir/model/operators/and'
40
+ require 'expressir/model/operators/andor'
41
+ require 'expressir/model/operators/combine'
42
+ require 'expressir/model/operators/equal'
43
+ require 'expressir/model/operators/exponentiation'
44
+ require 'expressir/model/operators/greater_than'
45
+ require 'expressir/model/operators/greater_than_or_equal'
46
+ require 'expressir/model/operators/in'
47
+ require 'expressir/model/operators/instance_equal'
48
+ require 'expressir/model/operators/instance_not_equal'
49
+ require 'expressir/model/operators/integer_division'
50
+ require 'expressir/model/operators/less_than'
51
+ require 'expressir/model/operators/less_than_or_equal'
52
+ require 'expressir/model/operators/like'
53
+ require 'expressir/model/operators/modulo'
54
+ require 'expressir/model/operators/multiplication'
55
+ require 'expressir/model/operators/not'
56
+ require 'expressir/model/operators/not_equal'
57
+ require 'expressir/model/operators/oneof'
58
+ require 'expressir/model/operators/or'
59
+ require 'expressir/model/operators/real_division'
60
+ require 'expressir/model/operators/subtraction'
61
+ require 'expressir/model/operators/unary_plus'
62
+ require 'expressir/model/operators/unary_minus'
63
+ require 'expressir/model/operators/xor'
64
+ require 'expressir/model/statements/alias'
65
+ require 'expressir/model/statements/assignment'
66
+ require 'expressir/model/statements/case'
67
+ require 'expressir/model/statements/case_action'
68
+ require 'expressir/model/statements/compound'
69
+ require 'expressir/model/statements/escape'
70
+ require 'expressir/model/statements/if'
71
+ require 'expressir/model/statements/null'
72
+ require 'expressir/model/statements/procedure_call'
73
+ require 'expressir/model/statements/repeat'
74
+ require 'expressir/model/statements/return'
75
+ require 'expressir/model/statements/skip'
76
+ require 'expressir/model/types/aggregate'
77
+ require 'expressir/model/types/array'
78
+ require 'expressir/model/types/bag'
79
+ require 'expressir/model/types/binary'
80
+ require 'expressir/model/types/boolean'
81
+ require 'expressir/model/types/enumeration'
82
+ require 'expressir/model/types/generic_entity'
83
+ require 'expressir/model/types/generic'
84
+ require 'expressir/model/types/integer'
85
+ require 'expressir/model/types/list'
86
+ require 'expressir/model/types/logical'
87
+ require 'expressir/model/types/number'
88
+ require 'expressir/model/types/real'
89
+ require 'expressir/model/types/set'
90
+ require 'expressir/model/types/select'
91
+ require 'expressir/model/types/string'
@@ -4,11 +4,13 @@ module Expressir
4
4
  attr_accessor :id
5
5
  attr_accessor :type
6
6
  attr_accessor :expression
7
+ attr_accessor :remarks
7
8
 
8
9
  def initialize(options = {})
9
10
  @id = options[:id]
10
11
  @type = options[:type]
11
12
  @expression = options[:expression]
13
+ @remarks = options[:remarks]
12
14
  end
13
15
  end
14
16
  end
@@ -2,13 +2,17 @@ module Expressir
2
2
  module Model
3
3
  class Derived
4
4
  attr_accessor :id
5
+ attr_accessor :supertype_attribute
5
6
  attr_accessor :type
6
7
  attr_accessor :expression
8
+ attr_accessor :remarks
7
9
 
8
10
  def initialize(options = {})
9
11
  @id = options[:id]
12
+ @supertype_attribute = options[:supertype_attribute]
10
13
  @type = options[:type]
11
14
  @expression = options[:expression]
15
+ @remarks = options[:remarks]
12
16
  end
13
17
  end
14
18
  end
@@ -11,6 +11,7 @@ module Expressir
11
11
  attr_accessor :inverse
12
12
  attr_accessor :unique
13
13
  attr_accessor :where
14
+ attr_accessor :remarks
14
15
 
15
16
  def initialize(options = {})
16
17
  @id = options[:id]
@@ -23,6 +24,17 @@ module Expressir
23
24
  @inverse = options[:inverse]
24
25
  @unique = options[:unique]
25
26
  @where = options[:where]
27
+ @remarks = options[:remarks]
28
+ end
29
+
30
+ def scope_items
31
+ items = []
32
+ items.push(*@explicit) if @explicit
33
+ items.push(*@derived) if @derived
34
+ items.push(*@inverse) if @inverse
35
+ items.push(*@unique) if @unique
36
+ items.push(*@where) if @where
37
+ items
26
38
  end
27
39
  end
28
40
  end
@@ -0,0 +1,13 @@
1
+ module Expressir
2
+ module Model
3
+ class EnumerationItem
4
+ attr_accessor :id
5
+ attr_accessor :remarks
6
+
7
+ def initialize(options = {})
8
+ @id = options[:id]
9
+ @remarks = options[:remarks]
10
+ end
11
+ end
12
+ end
13
+ end
@@ -2,13 +2,17 @@ module Expressir
2
2
  module Model
3
3
  class Explicit
4
4
  attr_accessor :id
5
+ attr_accessor :supertype_attribute
5
6
  attr_accessor :optional
6
7
  attr_accessor :type
8
+ attr_accessor :remarks
7
9
 
8
10
  def initialize(options = {})
9
11
  @id = options[:id]
12
+ @supertype_attribute = options[:supertype_attribute]
10
13
  @optional = options[:optional]
11
14
  @type = options[:type]
15
+ @remarks = options[:remarks]
12
16
  end
13
17
  end
14
18
  end
@@ -0,0 +1,13 @@
1
+ module Expressir
2
+ module Model
3
+ module Expressions
4
+ class AggregateInitializer
5
+ attr_accessor :items
6
+
7
+ def initialize(options = {})
8
+ @items = options[:items]
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -5,11 +5,19 @@ module Expressir
5
5
  attr_accessor :id
6
6
  attr_accessor :source
7
7
  attr_accessor :expression
8
+ attr_accessor :remarks
8
9
 
9
10
  def initialize(options = {})
10
11
  @id = options[:id]
11
12
  @source = options[:source]
12
13
  @expression = options[:expression]
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
@@ -8,6 +8,7 @@ module Expressir
8
8
  attr_accessor :constants
9
9
  attr_accessor :locals
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
  @constants = options[:constants]
18
19
  @locals = options[:locals]
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(*@parameters) if @parameters
47
+ items.push(*@declarations) if @declarations
48
+ items.push(*@constants) if @constants
49
+ items.push(*@locals) if @locals
50
+ items
20
51
  end
21
52
  end
22
53
  end
@@ -2,13 +2,17 @@ module Expressir
2
2
  module Model
3
3
  class Inverse
4
4
  attr_accessor :id
5
+ attr_accessor :supertype_attribute
5
6
  attr_accessor :type
6
7
  attr_accessor :attribute
8
+ attr_accessor :remarks
7
9
 
8
10
  def initialize(options = {})
9
11
  @id = options[:id]
12
+ @supertype_attribute = options[:supertype_attribute]
10
13
  @type = options[:type]
11
14
  @attribute = options[:attribute]
15
+ @remarks = options[:remarks]
12
16
  end
13
17
  end
14
18
  end
@@ -0,0 +1,13 @@
1
+ module Expressir
2
+ module Model
3
+ module Literals
4
+ class Binary
5
+ attr_accessor :value
6
+
7
+ def initialize(options = {})
8
+ @value = options[:value]
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ module Expressir
2
+ module Model
3
+ module Literals
4
+ class Integer
5
+ attr_accessor :value
6
+
7
+ def initialize(options = {})
8
+ @value = options[:value]
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ module Expressir
2
+ module Model
3
+ module Literals
4
+ class Logical
5
+ attr_accessor :value
6
+
7
+ def initialize(options = {})
8
+ @value = options[:value]
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ module Expressir
2
+ module Model
3
+ module Literals
4
+ class Real
5
+ attr_accessor :value
6
+
7
+ def initialize(options = {})
8
+ @value = options[:value]
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,15 @@
1
+ module Expressir
2
+ module Model
3
+ module Literals
4
+ class String
5
+ attr_accessor :value
6
+ attr_accessor :encoded
7
+
8
+ def initialize(options = {})
9
+ @value = options[:value]
10
+ @encoded = options[:encoded]
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -4,11 +4,13 @@ module Expressir
4
4
  attr_accessor :id
5
5
  attr_accessor :type
6
6
  attr_accessor :expression
7
+ attr_accessor :remarks
7
8
 
8
9
  def initialize(options = {})
9
10
  @id = options[:id]
10
11
  @type = options[:type]
11
12
  @expression = options[:expression]
13
+ @remarks = options[:remarks]
12
14
  end
13
15
  end
14
16
  end
@@ -4,11 +4,13 @@ module Expressir
4
4
  attr_accessor :id
5
5
  attr_accessor :type
6
6
  attr_accessor :var
7
+ attr_accessor :remarks
7
8
 
8
9
  def initialize(options = {})
9
10
  @id = options[:id]
10
11
  @type = options[:type]
11
12
  @var = options[:var]
13
+ @remarks = options[:remarks]
12
14
  end
13
15
  end
14
16
  end
@@ -7,6 +7,7 @@ module Expressir
7
7
  attr_accessor :constants
8
8
  attr_accessor :locals
9
9
  attr_accessor :statements
10
+ attr_accessor :remarks
10
11
 
11
12
  def initialize(options = {})
12
13
  @id = options[:id]
@@ -15,6 +16,36 @@ module Expressir
15
16
  @constants = options[:constants]
16
17
  @locals = options[:locals]
17
18
  @statements = options[:statements]
19
+ @remarks = options[:remarks]
20
+ end
21
+
22
+ def types
23
+ @declarations.select{|x| x.instance_of? Expressir::Model::Type}
24
+ end
25
+
26
+ def entities
27
+ @declarations.select{|x| x.instance_of? Expressir::Model::Entity}
28
+ end
29
+
30
+ def subtype_constraints
31
+ @declarations.select{|x| x.instance_of? Expressir::Model::SubtypeConstraint}
32
+ end
33
+
34
+ def functions
35
+ @declarations.select{|x| x.instance_of? Expressir::Model::Function}
36
+ end
37
+
38
+ def procedures
39
+ @declarations.select{|x| x.instance_of? Expressir::Model::Procedure}
40
+ end
41
+
42
+ def scope_items
43
+ items = []
44
+ items.push(*@parameters) if @parameters
45
+ items.push(*@declarations) if @declarations
46
+ items.push(*@constants) if @constants
47
+ items.push(*@locals) if @locals
48
+ items
18
49
  end
19
50
  end
20
51
  end
@@ -6,6 +6,12 @@ module Expressir
6
6
  def initialize(options = {})
7
7
  @schemas = options[:schemas]
8
8
  end
9
+
10
+ def scope_items
11
+ items = []
12
+ items.push(*@schemas) if @schemas
13
+ items
14
+ end
9
15
  end
10
16
  end
11
17
  end