expressir 0.2.9-x86-linux → 0.2.10-x86-linux

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 (82) hide show
  1. checksums.yaml +4 -4
  2. data/lib/expressir/express_exp/formatter.rb +71 -16
  3. data/lib/expressir/express_exp/visitor.rb +95 -41
  4. data/lib/expressir/model.rb +2 -0
  5. data/lib/expressir/model/attribute.rb +3 -1
  6. data/lib/expressir/model/constant.rb +3 -1
  7. data/lib/expressir/model/entity.rb +11 -21
  8. data/lib/expressir/model/enumeration_item.rb +3 -1
  9. data/lib/expressir/model/expressions/aggregate_initializer.rb +2 -2
  10. data/lib/expressir/model/expressions/aggregate_item.rb +1 -1
  11. data/lib/expressir/model/expressions/attribute_reference.rb +1 -1
  12. data/lib/expressir/model/expressions/binary_expression.rb +1 -1
  13. data/lib/expressir/model/expressions/call.rb +2 -2
  14. data/lib/expressir/model/expressions/entity_constructor.rb +2 -2
  15. data/lib/expressir/model/expressions/group_reference.rb +1 -1
  16. data/lib/expressir/model/expressions/index_reference.rb +1 -1
  17. data/lib/expressir/model/expressions/interval.rb +1 -1
  18. data/lib/expressir/model/expressions/query_expression.rb +3 -1
  19. data/lib/expressir/model/expressions/simple_reference.rb +1 -1
  20. data/lib/expressir/model/expressions/unary_expression.rb +1 -1
  21. data/lib/expressir/model/function.rb +32 -38
  22. data/lib/expressir/model/identifier.rb +1 -2
  23. data/lib/expressir/model/informal_proposition.rb +3 -1
  24. data/lib/expressir/model/interface.rb +2 -2
  25. data/lib/expressir/model/literals/binary.rb +1 -1
  26. data/lib/expressir/model/literals/integer.rb +1 -1
  27. data/lib/expressir/model/literals/logical.rb +1 -1
  28. data/lib/expressir/model/literals/real.rb +1 -1
  29. data/lib/expressir/model/literals/string.rb +1 -1
  30. data/lib/expressir/model/model_element.rb +67 -0
  31. data/lib/expressir/model/parameter.rb +3 -1
  32. data/lib/expressir/model/procedure.rb +33 -39
  33. data/lib/expressir/model/renamed_ref.rb +1 -1
  34. data/lib/expressir/model/repository.rb +3 -3
  35. data/lib/expressir/model/rule.rb +34 -40
  36. data/lib/expressir/model/schema.rb +35 -48
  37. data/lib/expressir/model/scope.rb +0 -3
  38. data/lib/expressir/model/statements/alias.rb +4 -2
  39. data/lib/expressir/model/statements/assignment.rb +1 -1
  40. data/lib/expressir/model/statements/call.rb +2 -2
  41. data/lib/expressir/model/statements/case.rb +2 -2
  42. data/lib/expressir/model/statements/case_action.rb +2 -2
  43. data/lib/expressir/model/statements/compound.rb +2 -2
  44. data/lib/expressir/model/statements/escape.rb +1 -1
  45. data/lib/expressir/model/statements/if.rb +3 -3
  46. data/lib/expressir/model/statements/null.rb +1 -1
  47. data/lib/expressir/model/statements/repeat.rb +4 -2
  48. data/lib/expressir/model/statements/return.rb +1 -1
  49. data/lib/expressir/model/statements/skip.rb +1 -1
  50. data/lib/expressir/model/subtype_constraint.rb +3 -1
  51. data/lib/expressir/model/type.rb +7 -5
  52. data/lib/expressir/model/types/aggregate.rb +3 -1
  53. data/lib/expressir/model/types/array.rb +1 -1
  54. data/lib/expressir/model/types/bag.rb +1 -1
  55. data/lib/expressir/model/types/binary.rb +1 -1
  56. data/lib/expressir/model/types/boolean.rb +1 -1
  57. data/lib/expressir/model/types/enumeration.rb +3 -3
  58. data/lib/expressir/model/types/generic.rb +3 -1
  59. data/lib/expressir/model/types/generic_entity.rb +3 -1
  60. data/lib/expressir/model/types/integer.rb +1 -1
  61. data/lib/expressir/model/types/list.rb +1 -1
  62. data/lib/expressir/model/types/logical.rb +1 -1
  63. data/lib/expressir/model/types/number.rb +1 -1
  64. data/lib/expressir/model/types/real.rb +1 -1
  65. data/lib/expressir/model/types/select.rb +3 -3
  66. data/lib/expressir/model/types/set.rb +1 -1
  67. data/lib/expressir/model/types/string.rb +1 -1
  68. data/lib/expressir/model/unique.rb +4 -2
  69. data/lib/expressir/model/variable.rb +3 -1
  70. data/lib/expressir/model/where.rb +3 -1
  71. data/lib/expressir/version.rb +1 -1
  72. data/original/examples/syntax/remark_formatted.exp +0 -5
  73. data/original/examples/syntax/simple.exp +3 -0
  74. data/original/examples/syntax/syntax.exp +189 -181
  75. data/original/examples/syntax/syntax_formatted.exp +346 -792
  76. data/spec/expressir/express_exp/head_source_spec.rb +1 -4
  77. data/spec/expressir/express_exp/parse_remark_spec.rb +3 -3
  78. data/spec/expressir/express_exp/parse_syntax_spec.rb +1583 -1578
  79. data/spec/expressir/express_exp/source_spec.rb +1 -4
  80. data/spec/expressir/model/model_element_spec.rb +59 -0
  81. data/spec/expressir/model/{find_spec.rb → scope_spec.rb} +1 -1
  82. metadata +6 -3
@@ -0,0 +1,67 @@
1
+ module Expressir
2
+ module Model
3
+ class ModelElement
4
+ CLASS_KEY = '_class'
5
+
6
+ def to_hash(options = {})
7
+ skip_empty = options[:skip_empty]
8
+
9
+ instance_variables.select{|x| x != :@parent}.each_with_object({ CLASS_KEY => self.class.name }) do |variable, result|
10
+ key = variable.to_s.sub(/^@/, '')
11
+ value = instance_variable_get(variable)
12
+
13
+ # skip default values (nil, empty array)
14
+ if !skip_empty or !(value.nil? or (value.is_a? Array and value.count == 0))
15
+ result[key] = if value.is_a? Array
16
+ value.map do |value|
17
+ if value.is_a? ModelElement
18
+ value.to_hash(options)
19
+ else
20
+ value
21
+ end
22
+ end
23
+ elsif value.is_a? ModelElement
24
+ value.to_hash(options)
25
+ else
26
+ value
27
+ end
28
+ end
29
+ end
30
+ end
31
+
32
+ def self.from_hash(hash)
33
+ node_class = hash[CLASS_KEY]
34
+ node_options = hash.select{|x| x != CLASS_KEY}.each_with_object({}) do |(variable, value), result|
35
+ key = variable.to_sym
36
+
37
+ result[key] = if value.is_a? Array
38
+ value.map do |value|
39
+ if value.is_a? Hash
40
+ self.from_hash(value)
41
+ else
42
+ value
43
+ end
44
+ end
45
+ elsif value.is_a? Hash
46
+ self.from_hash(value)
47
+ else
48
+ value
49
+ end
50
+ end
51
+
52
+ node = Object.const_get(node_class).new(node_options)
53
+
54
+ # attach parent
55
+ if node.class.method_defined? :children
56
+ node.children.each do |child_node|
57
+ if child_node.class.method_defined? :parent and !child_node.parent
58
+ child_node.parent = node
59
+ end
60
+ end
61
+ end
62
+
63
+ node
64
+ end
65
+ end
66
+ end
67
+ end
@@ -1,6 +1,6 @@
1
1
  module Expressir
2
2
  module Model
3
- class Parameter
3
+ class Parameter < ModelElement
4
4
  include Identifier
5
5
 
6
6
  attr_accessor :var
@@ -8,6 +8,8 @@ module Expressir
8
8
 
9
9
  def initialize(options = {})
10
10
  @id = options[:id]
11
+ @remarks = options.fetch(:remarks, [])
12
+ @source = options[:source]
11
13
 
12
14
  @var = options[:var]
13
15
  @type = options[:type]
@@ -1,58 +1,52 @@
1
1
  module Expressir
2
2
  module Model
3
- class Procedure
3
+ class Procedure < ModelElement
4
4
  include Scope
5
5
  include Identifier
6
6
 
7
7
  attr_accessor :parameters
8
- attr_accessor :declarations
8
+ attr_accessor :types
9
+ attr_accessor :entities
10
+ attr_accessor :subtype_constraints
11
+ attr_accessor :functions
12
+ attr_accessor :procedures
9
13
  attr_accessor :constants
10
14
  attr_accessor :variables
11
15
  attr_accessor :statements
12
16
 
13
17
  def initialize(options = {})
14
18
  @id = options[:id]
15
-
16
- @parameters = options[:parameters]
17
- @declarations = options[:declarations]
18
- @constants = options[:constants]
19
- @variables = options[:variables]
20
- @statements = options[:statements]
21
- end
22
-
23
- def types
24
- @declarations.select{|x| x.instance_of? Expressir::Model::Type}
25
- end
26
-
27
- def entities
28
- @declarations.select{|x| x.instance_of? Expressir::Model::Entity}
29
- end
30
-
31
- def subtype_constraints
32
- @declarations.select{|x| x.instance_of? Expressir::Model::SubtypeConstraint}
33
- end
34
-
35
- def functions
36
- @declarations.select{|x| x.instance_of? Expressir::Model::Function}
37
- end
38
-
39
- def procedures
40
- @declarations.select{|x| x.instance_of? Expressir::Model::Procedure}
19
+ @remarks = options.fetch(:remarks, [])
20
+ @source = options[:source]
21
+
22
+ @parameters = options.fetch(:parameters, [])
23
+ @types = options.fetch(:types, [])
24
+ @entities = options.fetch(:entities, [])
25
+ @subtype_constraints = options.fetch(:subtype_constraints, [])
26
+ @functions = options.fetch(:functions, [])
27
+ @procedures = options.fetch(:procedures, [])
28
+ @constants = options.fetch(:constants, [])
29
+ @variables = options.fetch(:variables, [])
30
+ @statements = options.fetch(:statements, [])
41
31
  end
42
32
 
43
33
  def children
44
34
  items = []
45
- items.push(*@parameters) if @parameters
46
- items.push(*@declarations.flat_map do |x|
47
- [
48
- x,
49
- *if x.instance_of? Expressir::Model::Type and x.type.instance_of? Expressir::Model::Types::Enumeration
50
- x.type.items
51
- end
52
- ]
53
- end) if @declarations
54
- items.push(*@constants) if @constants
55
- items.push(*@variables) if @variables
35
+ items.push(*@parameters)
36
+ items.push(*@types)
37
+ items.push(*@types.flat_map do |x|
38
+ if x.type.instance_of? Expressir::Model::Types::Enumeration
39
+ x.type.items
40
+ else
41
+ []
42
+ end
43
+ end)
44
+ items.push(*@entities)
45
+ items.push(*@subtype_constraints)
46
+ items.push(*@functions)
47
+ items.push(*@procedures)
48
+ items.push(*@constants)
49
+ items.push(*@variables)
56
50
  items
57
51
  end
58
52
  end
@@ -1,6 +1,6 @@
1
1
  module Expressir
2
2
  module Model
3
- class RenamedRef
3
+ class RenamedRef < ModelElement
4
4
  attr_accessor :ref
5
5
  attr_accessor :id
6
6
 
@@ -1,17 +1,17 @@
1
1
  module Expressir
2
2
  module Model
3
- class Repository
3
+ class Repository < ModelElement
4
4
  include Scope
5
5
 
6
6
  attr_accessor :schemas
7
7
 
8
8
  def initialize(options = {})
9
- @schemas = options[:schemas]
9
+ @schemas = options.fetch(:schemas, [])
10
10
  end
11
11
 
12
12
  def children
13
13
  items = []
14
- items.push(*@schemas) if @schemas
14
+ items.push(*@schemas)
15
15
  items
16
16
  end
17
17
  end
@@ -1,11 +1,15 @@
1
1
  module Expressir
2
2
  module Model
3
- class Rule
3
+ class Rule < ModelElement
4
4
  include Scope
5
5
  include Identifier
6
6
 
7
7
  attr_accessor :applies_to
8
- attr_accessor :declarations
8
+ attr_accessor :types
9
+ attr_accessor :entities
10
+ attr_accessor :subtype_constraints
11
+ attr_accessor :functions
12
+ attr_accessor :procedures
9
13
  attr_accessor :constants
10
14
  attr_accessor :variables
11
15
  attr_accessor :statements
@@ -14,50 +18,40 @@ module Expressir
14
18
 
15
19
  def initialize(options = {})
16
20
  @id = options[:id]
21
+ @remarks = options.fetch(:remarks, [])
22
+ @source = options[:source]
17
23
 
18
24
  @applies_to = options[:applies_to]
19
- @declarations = options[:declarations]
20
- @constants = options[:constants]
21
- @variables = options[:variables]
22
- @statements = options[:statements]
23
- @where = options[:where]
24
- @informal_propositions = options[:informal_propositions]
25
- end
26
-
27
- def types
28
- @declarations.select{|x| x.instance_of? Expressir::Model::Type}
29
- end
30
-
31
- def entities
32
- @declarations.select{|x| x.instance_of? Expressir::Model::Entity}
33
- end
34
-
35
- def subtype_constraints
36
- @declarations.select{|x| x.instance_of? Expressir::Model::SubtypeConstraint}
37
- end
38
-
39
- def functions
40
- @declarations.select{|x| x.instance_of? Expressir::Model::Function}
41
- end
42
-
43
- def procedures
44
- @declarations.select{|x| x.instance_of? Expressir::Model::Procedure}
25
+ @types = options.fetch(:types, [])
26
+ @entities = options.fetch(:entities, [])
27
+ @subtype_constraints = options.fetch(:subtype_constraints, [])
28
+ @functions = options.fetch(:functions, [])
29
+ @procedures = options.fetch(:procedures, [])
30
+ @constants = options.fetch(:constants, [])
31
+ @variables = options.fetch(:variables, [])
32
+ @statements = options.fetch(:statements, [])
33
+ @where = options.fetch(:where, [])
34
+ @informal_propositions = options.fetch(:informal_propositions, [])
45
35
  end
46
36
 
47
37
  def children
48
38
  items = []
49
- items.push(*@declarations.flat_map do |x|
50
- [
51
- x,
52
- *if x.instance_of? Expressir::Model::Type and x.type.instance_of? Expressir::Model::Types::Enumeration
53
- x.type.items
54
- end
55
- ]
56
- end) if @declarations
57
- items.push(*@constants) if @constants
58
- items.push(*@variables) if @variables
59
- items.push(*@where) if @where
60
- items.push(*@informal_propositions) if @informal_propositions
39
+ items.push(*@types)
40
+ items.push(*@types.flat_map do |x|
41
+ if x.type.instance_of? Expressir::Model::Types::Enumeration
42
+ x.type.items
43
+ else
44
+ []
45
+ end
46
+ end)
47
+ items.push(*@entities)
48
+ items.push(*@subtype_constraints)
49
+ items.push(*@functions)
50
+ items.push(*@procedures)
51
+ items.push(*@constants)
52
+ items.push(*@variables)
53
+ items.push(*@where)
54
+ items.push(*@informal_propositions)
61
55
  items
62
56
  end
63
57
  end
@@ -1,67 +1,54 @@
1
1
  module Expressir
2
2
  module Model
3
- class Schema
3
+ class Schema < ModelElement
4
4
  include Scope
5
5
  include Identifier
6
6
 
7
+ attr_accessor :head_source
8
+
7
9
  attr_accessor :version
8
10
  attr_accessor :interfaces
9
11
  attr_accessor :constants
10
- attr_accessor :declarations
11
-
12
- attr_accessor :head_source
12
+ attr_accessor :types
13
+ attr_accessor :entities
14
+ attr_accessor :subtype_constraints
15
+ attr_accessor :functions
16
+ attr_accessor :procedures
17
+ attr_accessor :rules
13
18
 
14
19
  def initialize(options = {})
15
20
  @id = options[:id]
16
- @version = options[:version]
17
- @interfaces = options[:interfaces]
18
- @constants = options[:constants]
19
- @declarations = options[:declarations]
20
- end
21
+ @remarks = options.fetch(:remarks, [])
22
+ @source = options[:source]
23
+ @head_source = options[:head_source]
21
24
 
22
- def use_interfaces
23
- @interfaces.select{|x| x.kind == Expressir::Model::Interface::USE}
24
- end
25
-
26
- def reference_interfaces
27
- @interfaces.select{|x| x.kind == Expressir::Model::Interface::REFERENCE}
28
- end
29
-
30
- def types
31
- @declarations.select{|x| x.instance_of? Expressir::Model::Type}
32
- end
33
-
34
- def entities
35
- @declarations.select{|x| x.instance_of? Expressir::Model::Entity}
36
- end
37
-
38
- def subtype_constraints
39
- @declarations.select{|x| x.instance_of? Expressir::Model::SubtypeConstraint}
40
- end
41
-
42
- def functions
43
- @declarations.select{|x| x.instance_of? Expressir::Model::Function}
44
- end
45
-
46
- def procedures
47
- @declarations.select{|x| x.instance_of? Expressir::Model::Procedure}
48
- end
49
-
50
- def rules
51
- @declarations.select{|x| x.instance_of? Expressir::Model::Rule}
25
+ @version = options[:version]
26
+ @interfaces = options.fetch(:interfaces, [])
27
+ @constants = options.fetch(:constants, [])
28
+ @types = options.fetch(:types, [])
29
+ @entities = options.fetch(:entities, [])
30
+ @subtype_constraints = options.fetch(:subtype_constraints, [])
31
+ @functions = options.fetch(:functions, [])
32
+ @procedures = options.fetch(:procedures, [])
33
+ @rules = options.fetch(:rules, [])
52
34
  end
53
35
 
54
36
  def children
55
37
  items = []
56
- items.push(*@constants) if @constants
57
- items.push(*@declarations.flat_map do |x|
58
- [
59
- x,
60
- *if x.instance_of? Expressir::Model::Type and x.type.instance_of? Expressir::Model::Types::Enumeration
61
- x.type.items
62
- end
63
- ]
64
- end) if @declarations
38
+ items.push(*@constants)
39
+ items.push(*@types)
40
+ items.push(*@types.flat_map do |x|
41
+ if x.type.instance_of? Expressir::Model::Types::Enumeration
42
+ x.type.items
43
+ else
44
+ []
45
+ end
46
+ end)
47
+ items.push(*@entities)
48
+ items.push(*@subtype_constraints)
49
+ items.push(*@functions)
50
+ items.push(*@procedures)
51
+ items.push(*@rules)
65
52
  items
66
53
  end
67
54
  end
@@ -1,8 +1,6 @@
1
1
  module Expressir
2
2
  module Model
3
3
  module Scope
4
- attr_accessor :source
5
-
6
4
  def find(path)
7
5
  current_path, _, rest = path.partition(".")
8
6
 
@@ -47,7 +45,6 @@ module Expressir
47
45
  })
48
46
  informal_proposition.parent = child
49
47
 
50
- child.informal_propositions ||= []
51
48
  child.informal_propositions << informal_proposition
52
49
 
53
50
  informal_proposition
@@ -1,7 +1,7 @@
1
1
  module Expressir
2
2
  module Model
3
3
  module Statements
4
- class Alias
4
+ class Alias < ModelElement
5
5
  include Scope
6
6
  include Identifier
7
7
 
@@ -10,9 +10,11 @@ module Expressir
10
10
 
11
11
  def initialize(options = {})
12
12
  @id = options[:id]
13
+ @remarks = options.fetch(:remarks, [])
14
+ @source = options[:source]
13
15
 
14
16
  @expression = options[:expression]
15
- @statements = options[:statements]
17
+ @statements = options.fetch(:statements, [])
16
18
  end
17
19
 
18
20
  def children