expressir 0.2.2 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (86) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/lib/expressir/express_exp/formatter.rb +1444 -0
  4. data/lib/expressir/express_exp/visitor.rb +288 -280
  5. data/lib/expressir/model.rb +13 -42
  6. data/lib/expressir/model/{derived.rb → attribute.rb} +13 -4
  7. data/lib/expressir/model/constant.rb +2 -1
  8. data/lib/expressir/model/entity.rb +22 -17
  9. data/lib/expressir/model/enumeration_item.rb +2 -1
  10. data/lib/expressir/model/expressions/aggregate_initializer.rb +9 -9
  11. data/lib/expressir/model/expressions/aggregate_item.rb +15 -0
  12. data/lib/expressir/model/expressions/{attribute_qualifier.rb → attribute_reference.rb} +3 -1
  13. data/lib/expressir/model/expressions/binary_expression.rb +40 -0
  14. data/lib/expressir/model/expressions/{function_call.rb → call.rb} +3 -3
  15. data/lib/expressir/model/expressions/entity_constructor.rb +11 -11
  16. data/lib/expressir/model/expressions/{group_qualifier.rb → group_reference.rb} +3 -1
  17. data/lib/expressir/model/expressions/{index_qualifier.rb → index_reference.rb} +3 -1
  18. data/lib/expressir/model/expressions/interval.rb +17 -17
  19. data/lib/expressir/model/expressions/query_expression.rb +26 -0
  20. data/lib/expressir/model/expressions/simple_reference.rb +13 -0
  21. data/lib/expressir/model/expressions/{expression.rb → unary_expression.rb} +7 -3
  22. data/lib/expressir/model/function.rb +14 -6
  23. data/lib/expressir/model/{reference.rb → interface.rb} +6 -1
  24. data/lib/expressir/model/literals/logical.rb +4 -0
  25. data/lib/expressir/model/parameter.rb +4 -3
  26. data/lib/expressir/model/procedure.rb +14 -6
  27. data/lib/expressir/model/repository.rb +1 -1
  28. data/lib/expressir/model/rule.rb +16 -8
  29. data/lib/expressir/model/schema.rb +22 -6
  30. data/lib/expressir/model/statements/alias.rb +3 -2
  31. data/lib/expressir/model/statements/{procedure_call.rb → call.rb} +3 -3
  32. data/lib/expressir/model/statements/case.rb +2 -2
  33. data/lib/expressir/model/statements/case_action.rb +2 -2
  34. data/lib/expressir/model/statements/repeat.rb +3 -2
  35. data/lib/expressir/model/subtype_constraint.rb +6 -5
  36. data/lib/expressir/model/type.rb +3 -2
  37. data/lib/expressir/model/types/aggregate.rb +2 -1
  38. data/lib/expressir/model/types/generic.rb +2 -1
  39. data/lib/expressir/model/types/generic_entity.rb +2 -1
  40. data/lib/expressir/model/unique.rb +2 -1
  41. data/lib/expressir/model/{local.rb → variable.rb} +3 -2
  42. data/lib/expressir/model/where.rb +2 -1
  43. data/lib/expressir/version.rb +1 -1
  44. data/original/examples/syntax/remark.exp +126 -108
  45. data/original/examples/syntax/remark_formatted.exp +172 -0
  46. data/original/examples/syntax/syntax.exp +287 -277
  47. data/original/examples/syntax/syntax_formatted.exp +1176 -0
  48. data/spec/expressir/express_exp/format_remark_spec.rb +28 -0
  49. data/spec/expressir/express_exp/format_syntax_spec.rb +28 -0
  50. data/spec/expressir/express_exp/{remark_spec.rb → parse_remark_spec.rb} +80 -36
  51. data/spec/expressir/express_exp/parse_syntax_spec.rb +2998 -0
  52. metadata +22 -46
  53. data/lib/expressir/model/explicit.rb +0 -19
  54. data/lib/expressir/model/expressions/aggregate_element.rb +0 -15
  55. data/lib/expressir/model/expressions/qualified_ref.rb +0 -15
  56. data/lib/expressir/model/expressions/query.rb +0 -25
  57. data/lib/expressir/model/inverse.rb +0 -19
  58. data/lib/expressir/model/operators/addition.rb +0 -8
  59. data/lib/expressir/model/operators/and.rb +0 -8
  60. data/lib/expressir/model/operators/andor.rb +0 -8
  61. data/lib/expressir/model/operators/combine.rb +0 -8
  62. data/lib/expressir/model/operators/equal.rb +0 -8
  63. data/lib/expressir/model/operators/exponentiation.rb +0 -8
  64. data/lib/expressir/model/operators/greater_than.rb +0 -8
  65. data/lib/expressir/model/operators/greater_than_or_equal.rb +0 -8
  66. data/lib/expressir/model/operators/in.rb +0 -8
  67. data/lib/expressir/model/operators/instance_equal.rb +0 -8
  68. data/lib/expressir/model/operators/instance_not_equal.rb +0 -8
  69. data/lib/expressir/model/operators/integer_division.rb +0 -8
  70. data/lib/expressir/model/operators/less_than.rb +0 -8
  71. data/lib/expressir/model/operators/less_than_or_equal.rb +0 -8
  72. data/lib/expressir/model/operators/like.rb +0 -8
  73. data/lib/expressir/model/operators/modulo.rb +0 -8
  74. data/lib/expressir/model/operators/multiplication.rb +0 -8
  75. data/lib/expressir/model/operators/not.rb +0 -8
  76. data/lib/expressir/model/operators/not_equal.rb +0 -8
  77. data/lib/expressir/model/operators/oneof.rb +0 -8
  78. data/lib/expressir/model/operators/or.rb +0 -8
  79. data/lib/expressir/model/operators/real_division.rb +0 -8
  80. data/lib/expressir/model/operators/subtraction.rb +0 -8
  81. data/lib/expressir/model/operators/unary_minus.rb +0 -8
  82. data/lib/expressir/model/operators/unary_plus.rb +0 -8
  83. data/lib/expressir/model/operators/xor.rb +0 -8
  84. data/lib/expressir/model/ref.rb +0 -11
  85. data/lib/expressir/model/use.rb +0 -13
  86. data/spec/expressir/express_exp/syntax_spec.rb +0 -2992
@@ -1,15 +1,11 @@
1
+ require 'expressir/model/attribute'
1
2
  require 'expressir/model/constant'
2
- require 'expressir/model/derived'
3
3
  require 'expressir/model/entity'
4
4
  require 'expressir/model/enumeration_item'
5
- require 'expressir/model/explicit'
6
5
  require 'expressir/model/function'
7
- require 'expressir/model/inverse'
8
- require 'expressir/model/local'
6
+ require 'expressir/model/interface'
9
7
  require 'expressir/model/parameter'
10
8
  require 'expressir/model/procedure'
11
- require 'expressir/model/ref'
12
- require 'expressir/model/reference'
13
9
  require 'expressir/model/renamed_ref'
14
10
  require 'expressir/model/repository'
15
11
  require 'expressir/model/rule'
@@ -17,59 +13,34 @@ require 'expressir/model/schema'
17
13
  require 'expressir/model/subtype_constraint'
18
14
  require 'expressir/model/type'
19
15
  require 'expressir/model/unique'
20
- require 'expressir/model/use'
16
+ require 'expressir/model/variable'
21
17
  require 'expressir/model/where'
22
18
  require 'expressir/model/expressions/aggregate_initializer'
23
- require 'expressir/model/expressions/aggregate_element'
24
- require 'expressir/model/expressions/attribute_qualifier'
19
+ require 'expressir/model/expressions/aggregate_item'
20
+ require 'expressir/model/expressions/binary_expression'
21
+ require 'expressir/model/expressions/call'
22
+ require 'expressir/model/expressions/attribute_reference'
25
23
  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'
24
+ require 'expressir/model/expressions/group_reference'
25
+ require 'expressir/model/expressions/index_reference'
30
26
  require 'expressir/model/expressions/interval'
31
- require 'expressir/model/expressions/qualified_ref'
32
- require 'expressir/model/expressions/query'
27
+ require 'expressir/model/expressions/query_expression'
28
+ require 'expressir/model/expressions/simple_reference'
29
+ require 'expressir/model/expressions/unary_expression'
33
30
  require 'expressir/model/literals/binary'
34
31
  require 'expressir/model/literals/integer'
35
32
  require 'expressir/model/literals/logical'
36
33
  require 'expressir/model/literals/real'
37
34
  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
35
  require 'expressir/model/statements/alias'
65
36
  require 'expressir/model/statements/assignment'
37
+ require 'expressir/model/statements/call'
66
38
  require 'expressir/model/statements/case'
67
39
  require 'expressir/model/statements/case_action'
68
40
  require 'expressir/model/statements/compound'
69
41
  require 'expressir/model/statements/escape'
70
42
  require 'expressir/model/statements/if'
71
43
  require 'expressir/model/statements/null'
72
- require 'expressir/model/statements/procedure_call'
73
44
  require 'expressir/model/statements/repeat'
74
45
  require 'expressir/model/statements/return'
75
46
  require 'expressir/model/statements/skip'
@@ -1,18 +1,27 @@
1
1
  module Expressir
2
2
  module Model
3
- class Derived
4
- attr_accessor :id
3
+ class Attribute
4
+ EXPLICIT = :EXPLICIT
5
+ DERIVED = :DERIVED
6
+ INVERSE = :INVERSE
7
+
8
+ attr_accessor :kind
5
9
  attr_accessor :supertype_attribute
10
+ attr_accessor :id
11
+ attr_accessor :optional
6
12
  attr_accessor :type
7
13
  attr_accessor :expression
14
+
15
+ attr_accessor :parent
8
16
  attr_accessor :remarks
9
17
 
10
18
  def initialize(options = {})
11
- @id = options[:id]
19
+ @kind = options[:kind]
12
20
  @supertype_attribute = options[:supertype_attribute]
21
+ @id = options[:id]
22
+ @optional = options[:optional]
13
23
  @type = options[:type]
14
24
  @expression = options[:expression]
15
- @remarks = options[:remarks]
16
25
  end
17
26
  end
18
27
  end
@@ -4,13 +4,14 @@ module Expressir
4
4
  attr_accessor :id
5
5
  attr_accessor :type
6
6
  attr_accessor :expression
7
+
8
+ attr_accessor :parent
7
9
  attr_accessor :remarks
8
10
 
9
11
  def initialize(options = {})
10
12
  @id = options[:id]
11
13
  @type = options[:type]
12
14
  @expression = options[:expression]
13
- @remarks = options[:remarks]
14
15
  end
15
16
  end
16
17
  end
@@ -3,35 +3,40 @@ module Expressir
3
3
  class Entity
4
4
  attr_accessor :id
5
5
  attr_accessor :abstract
6
- attr_accessor :abstract_supertype
7
- attr_accessor :supertypes
8
- attr_accessor :subtype_expression
9
- attr_accessor :explicit
10
- attr_accessor :derived
11
- attr_accessor :inverse
6
+ attr_accessor :supertype_expression
7
+ attr_accessor :subtype_of
8
+ attr_accessor :attributes
12
9
  attr_accessor :unique
13
10
  attr_accessor :where
11
+
12
+ attr_accessor :parent
14
13
  attr_accessor :remarks
15
14
 
16
15
  def initialize(options = {})
17
16
  @id = options[:id]
18
17
  @abstract = options[:abstract]
19
- @abstract_supertype = options[:abstract_supertype]
20
- @supertypes = options[:supertypes]
21
- @subtype_expression = options[:subtype_expression]
22
- @explicit = options[:explicit]
23
- @derived = options[:derived]
24
- @inverse = options[:inverse]
18
+ @supertype_expression = options[:supertype_expression]
19
+ @subtype_of = options[:subtype_of]
20
+ @attributes = options[:attributes]
25
21
  @unique = options[:unique]
26
22
  @where = options[:where]
27
- @remarks = options[:remarks]
28
23
  end
29
24
 
30
- def scope_items
25
+ def explicit_attributes
26
+ @attributes.select{|x| x.kind == Expressir::Model::Attribute::EXPLICIT}
27
+ end
28
+
29
+ def derived_attributes
30
+ @attributes.select{|x| x.kind == Expressir::Model::Attribute::DERIVED}
31
+ end
32
+
33
+ def inverse_attributes
34
+ @attributes.select{|x| x.kind == Expressir::Model::Attribute::INVERSE}
35
+ end
36
+
37
+ def children
31
38
  items = []
32
- items.push(*@explicit) if @explicit
33
- items.push(*@derived) if @derived
34
- items.push(*@inverse) if @inverse
39
+ items.push(*@attributes) if @attributes
35
40
  items.push(*@unique) if @unique
36
41
  items.push(*@where) if @where
37
42
  items
@@ -2,11 +2,12 @@ module Expressir
2
2
  module Model
3
3
  class EnumerationItem
4
4
  attr_accessor :id
5
+
6
+ attr_accessor :parent
5
7
  attr_accessor :remarks
6
8
 
7
9
  def initialize(options = {})
8
10
  @id = options[:id]
9
- @remarks = options[:remarks]
10
11
  end
11
12
  end
12
13
  end
@@ -1,13 +1,13 @@
1
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
2
+ module Model
3
+ module Expressions
4
+ class AggregateInitializer
5
+ attr_accessor :items
6
+
7
+ def initialize(options = {})
8
+ @items = options[:items]
10
9
  end
11
10
  end
12
11
  end
13
- end
12
+ end
13
+ end
@@ -0,0 +1,15 @@
1
+ module Expressir
2
+ module Model
3
+ module Expressions
4
+ class AggregateItem
5
+ attr_accessor :expression
6
+ attr_accessor :repetition
7
+
8
+ def initialize(options = {})
9
+ @expression = options[:expression]
10
+ @repetition = options[:repetition]
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -1,10 +1,12 @@
1
1
  module Expressir
2
2
  module Model
3
3
  module Expressions
4
- class AttributeQualifier
4
+ class AttributeReference
5
+ attr_accessor :ref
5
6
  attr_accessor :attribute
6
7
 
7
8
  def initialize(options = {})
9
+ @ref = options[:ref]
8
10
  @attribute = options[:attribute]
9
11
  end
10
12
  end
@@ -0,0 +1,40 @@
1
+ module Expressir
2
+ module Model
3
+ module Expressions
4
+ class BinaryExpression
5
+ ADDITION = :ADDITION
6
+ AND = :AND
7
+ ANDOR = :ANDOR
8
+ COMBINE = :COMBINE
9
+ EQUAL = :EQUAL
10
+ EXPONENTIATION = :EXPONENTIATION
11
+ GREATER_THAN = :GREATER_THAN
12
+ GREATER_THAN_OR_EQUAL = :GREATER_THAN_OR_EQUAL
13
+ IN = :IN
14
+ INSTANCE_EQUAL = :INSTANCE_EQUAL
15
+ INSTANCE_NOT_EQUAL = :INSTANCE_NOT_EQUAL
16
+ INTEGER_DIVISION = :INTEGER_DIVISION
17
+ LESS_THAN = :LESS_THAN
18
+ LESS_THAN_OR_EQUAL = :LESS_THAN_OR_EQUAL
19
+ LIKE = :LIKE
20
+ MODULO = :MODULO
21
+ MULTIPLICATION = :MULTIPLICATION
22
+ NOT_EQUAL = :NOT_EQUAL
23
+ OR = :OR
24
+ REAL_DIVISION = :REAL_DIVISION
25
+ SUBTRACTION = :SUBTRACTION
26
+ XOR = :XOR
27
+
28
+ attr_accessor :operator
29
+ attr_accessor :operand1
30
+ attr_accessor :operand2
31
+
32
+ def initialize(options = {})
33
+ @operator = options[:operator]
34
+ @operand1 = options[:operand1]
35
+ @operand2 = options[:operand2]
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -1,12 +1,12 @@
1
1
  module Expressir
2
2
  module Model
3
3
  module Expressions
4
- class FunctionCall
5
- attr_accessor :function
4
+ class Call
5
+ attr_accessor :ref
6
6
  attr_accessor :parameters
7
7
 
8
8
  def initialize(options = {})
9
- @function = options[:function]
9
+ @ref = options[:ref]
10
10
  @parameters = options[:parameters]
11
11
  end
12
12
  end
@@ -1,15 +1,15 @@
1
1
  module Expressir
2
- module Model
3
- module Expressions
4
- class EntityConstructor
5
- attr_accessor :entity
6
- attr_accessor :parameters
7
-
8
- def initialize(options = {})
9
- @entity = options[:entity]
10
- @parameters = options[:parameters]
11
- end
2
+ module Model
3
+ module Expressions
4
+ class EntityConstructor
5
+ attr_accessor :entity
6
+ attr_accessor :parameters
7
+
8
+ def initialize(options = {})
9
+ @entity = options[:entity]
10
+ @parameters = options[:parameters]
12
11
  end
13
12
  end
14
13
  end
15
- end
14
+ end
15
+ end
@@ -1,10 +1,12 @@
1
1
  module Expressir
2
2
  module Model
3
3
  module Expressions
4
- class GroupQualifier
4
+ class GroupReference
5
+ attr_accessor :ref
5
6
  attr_accessor :entity
6
7
 
7
8
  def initialize(options = {})
9
+ @ref = options[:ref]
8
10
  @entity = options[:entity]
9
11
  end
10
12
  end
@@ -1,11 +1,13 @@
1
1
  module Expressir
2
2
  module Model
3
3
  module Expressions
4
- class IndexQualifier
4
+ class IndexReference
5
+ attr_accessor :ref
5
6
  attr_accessor :index1
6
7
  attr_accessor :index2
7
8
 
8
9
  def initialize(options = {})
10
+ @ref = options[:ref]
9
11
  @index1 = options[:index1]
10
12
  @index2 = options[:index2]
11
13
  end
@@ -1,21 +1,21 @@
1
1
  module Expressir
2
- module Model
3
- module Expressions
4
- class Interval
5
- attr_accessor :low
6
- attr_accessor :operator1
7
- attr_accessor :item
8
- attr_accessor :operator2
9
- attr_accessor :high
10
-
11
- def initialize(options = {})
12
- @low = options[:low]
13
- @operator1 = options[:operator1]
14
- @item = options[:item]
15
- @operator2 = options[:operator2]
16
- @high = options[:high]
17
- end
2
+ module Model
3
+ module Expressions
4
+ class Interval
5
+ attr_accessor :low
6
+ attr_accessor :operator1
7
+ attr_accessor :item
8
+ attr_accessor :operator2
9
+ attr_accessor :high
10
+
11
+ def initialize(options = {})
12
+ @low = options[:low]
13
+ @operator1 = options[:operator1]
14
+ @item = options[:item]
15
+ @operator2 = options[:operator2]
16
+ @high = options[:high]
18
17
  end
19
18
  end
20
19
  end
21
- end
20
+ end
21
+ end
@@ -0,0 +1,26 @@
1
+ module Expressir
2
+ module Model
3
+ module Expressions
4
+ class QueryExpression
5
+ attr_accessor :id
6
+ attr_accessor :source
7
+ attr_accessor :expression
8
+
9
+ attr_accessor :parent
10
+ attr_accessor :remarks
11
+
12
+ def initialize(options = {})
13
+ @id = options[:id]
14
+ @source = options[:source]
15
+ @expression = options[:expression]
16
+ end
17
+
18
+ def children
19
+ items = []
20
+ items.push(self)
21
+ items
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end