adsl 0.0.3 → 0.1.0

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 (91) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +2 -20
  3. data/README.md +14 -21
  4. data/bin/adsl-verify +8 -8
  5. data/lib/adsl.rb +3 -0
  6. data/lib/adsl/adsl.rb +3 -0
  7. data/lib/adsl/ds/data_store_spec.rb +339 -0
  8. data/lib/adsl/extract/instrumenter.rb +206 -0
  9. data/lib/adsl/extract/meta.rb +33 -0
  10. data/lib/adsl/extract/rails/action_block_builder.rb +233 -0
  11. data/lib/adsl/extract/rails/action_instrumenter.rb +400 -0
  12. data/lib/adsl/extract/rails/action_runner.rb +57 -0
  13. data/lib/adsl/extract/rails/active_record_metaclass_generator.rb +555 -0
  14. data/lib/adsl/extract/rails/callback_chain_simulator.rb +135 -0
  15. data/lib/adsl/extract/rails/invariant_extractor.rb +48 -0
  16. data/lib/adsl/extract/rails/invariant_instrumenter.rb +70 -0
  17. data/lib/adsl/extract/rails/other_meta.rb +57 -0
  18. data/lib/adsl/extract/rails/rails_extractor.rb +211 -0
  19. data/lib/adsl/extract/rails/rails_instrumentation_test_case.rb +34 -0
  20. data/lib/adsl/extract/rails/rails_special_gem_instrumentation.rb +120 -0
  21. data/lib/adsl/extract/rails/rails_test_helper.rb +140 -0
  22. data/lib/adsl/extract/sexp_utils.rb +54 -0
  23. data/lib/adsl/fol/first_order_logic.rb +261 -0
  24. data/lib/adsl/parser/adsl_parser.racc +159 -0
  25. data/lib/{parser → adsl/parser}/adsl_parser.rex +4 -4
  26. data/lib/{parser → adsl/parser}/adsl_parser.rex.rb +6 -6
  27. data/lib/adsl/parser/adsl_parser.tab.rb +1031 -0
  28. data/lib/adsl/parser/ast_nodes.rb +1410 -0
  29. data/lib/adsl/railtie.rb +67 -0
  30. data/lib/adsl/spass/bin.rb +230 -0
  31. data/lib/{spass → adsl/spass}/ruby_extensions.rb +0 -0
  32. data/lib/adsl/spass/spass_ds_extensions.rb +931 -0
  33. data/lib/adsl/spass/spass_translator.rb +393 -0
  34. data/lib/adsl/spass/util.rb +13 -0
  35. data/lib/adsl/util/csv_hash_formatter.rb +94 -0
  36. data/lib/adsl/util/general.rb +228 -0
  37. data/lib/adsl/util/test_helper.rb +71 -0
  38. data/lib/adsl/verification/formula_generators.rb +231 -0
  39. data/lib/adsl/verification/instrumentation_filter.rb +50 -0
  40. data/lib/adsl/verification/invariant.rb +19 -0
  41. data/lib/adsl/verification/rails_verification.rb +33 -0
  42. data/lib/adsl/verification/utils.rb +20 -0
  43. data/lib/adsl/verification/verification_case.rb +13 -0
  44. data/test/integration/rails/rails_branch_verification_test.rb +112 -0
  45. data/test/integration/rails/rails_verification_test.rb +253 -0
  46. data/test/integration/spass/basic_translation_test.rb +563 -0
  47. data/test/integration/spass/control_flow_translation_test.rb +421 -0
  48. data/test/unit/adsl/ds/data_store_spec_test.rb +54 -0
  49. data/test/unit/adsl/extract/instrumenter_test.rb +103 -0
  50. data/test/unit/adsl/extract/meta_test.rb +142 -0
  51. data/test/unit/adsl/extract/rails/action_block_builder_test.rb +178 -0
  52. data/test/unit/adsl/extract/rails/action_instrumenter_test.rb +68 -0
  53. data/test/unit/adsl/extract/rails/active_record_metaclass_generator_test.rb +336 -0
  54. data/test/unit/adsl/extract/rails/callback_chain_simulator_test.rb +76 -0
  55. data/test/unit/adsl/extract/rails/invariant_extractor_test.rb +92 -0
  56. data/test/unit/adsl/extract/rails/rails_extractor_test.rb +1380 -0
  57. data/test/unit/adsl/extract/rails/rails_test_helper_test.rb +25 -0
  58. data/test/unit/adsl/extract/sexp_utils_test.rb +100 -0
  59. data/test/unit/adsl/fol/first_order_logic_test.rb +227 -0
  60. data/test/unit/adsl/parser/action_parser_test.rb +1040 -0
  61. data/test/unit/adsl/parser/ast_nodes_test.rb +359 -0
  62. data/test/unit/adsl/parser/class_parser_test.rb +288 -0
  63. data/test/unit/adsl/parser/general_parser_test.rb +67 -0
  64. data/test/unit/adsl/parser/invariant_parser_test.rb +432 -0
  65. data/test/unit/adsl/parser/parser_util_test.rb +126 -0
  66. data/test/unit/adsl/spass/bin_test.rb +65 -0
  67. data/test/unit/adsl/spass/ruby_extensions_test.rb +39 -0
  68. data/test/unit/adsl/spass/spass_ds_extensions_test.rb +7 -0
  69. data/test/unit/adsl/spass/spass_translator_test.rb +342 -0
  70. data/test/unit/adsl/util/csv_hash_formatter_test.rb +68 -0
  71. data/test/unit/adsl/util/general_test.rb +303 -0
  72. data/test/unit/adsl/util/test_helper_test.rb +120 -0
  73. data/test/unit/adsl/verification/formula_generators_test.rb +200 -0
  74. data/test/unit/adsl/verification/instrumentation_filter_test.rb +39 -0
  75. data/test/unit/adsl/verification/utils_test.rb +39 -0
  76. data/test/unit/adsl/verification/verification_case_test.rb +8 -0
  77. metadata +229 -29
  78. data/lib/ds/data_store_spec.rb +0 -292
  79. data/lib/fol/first_order_logic.rb +0 -260
  80. data/lib/parser/adsl_ast.rb +0 -779
  81. data/lib/parser/adsl_parser.racc +0 -151
  82. data/lib/parser/adsl_parser.tab.rb +0 -976
  83. data/lib/parser/dsdl_parser.rex.rb +0 -196
  84. data/lib/parser/dsdl_parser.tab.rb +0 -976
  85. data/lib/spass/bin.rb +0 -164
  86. data/lib/spass/spass_ds_extensions.rb +0 -870
  87. data/lib/spass/spass_translator.rb +0 -388
  88. data/lib/spass/util.rb +0 -11
  89. data/lib/util/csv_hash_formatter.rb +0 -47
  90. data/lib/util/test_helper.rb +0 -33
  91. data/lib/util/util.rb +0 -114
@@ -0,0 +1,159 @@
1
+ class ADSLParser
2
+ prechigh
3
+ left '==' '!='
4
+ noassoc NOT
5
+ left '<=>'
6
+ left '<=' '=>'
7
+ left and or
8
+ preclow
9
+ token class extends inverseof action foreach either or create delete subset oneof allof invariant forall exists in empty true false not and equal equiv implies IDENT
10
+ start adslspec
11
+ rule
12
+ adslspec: root_elems { return ASTSpec.new :lineno => lineno, :classes => val[0][0], :actions => val[0][1], :invariants => val[0][2] }
13
+
14
+ root_elems: class_decl root_elems { val[1][0].unshift val[0]; return val[1] }
15
+ | action_decl root_elems { val[1][1].unshift val[0]; return val[1] }
16
+ | invariant_decl root_elems { val[1][2].unshift val[0]; return val[1] }
17
+ | { return [[], [], []] }
18
+
19
+ class_decl: class IDENT '{' rel_decls '}'
20
+ { return ASTClass.new :lineno => val[0], :name => val[1], :relations => val[3] }
21
+ | class IDENT extends IDENT '{' rel_decls '}'
22
+ { return ASTClass.new :lineno => val[0], :name => val[1], :parent_name => val[3], :relations => val[5] }
23
+
24
+ rel_decls: rel_decls rel_decl { val[0] << val[1]; return val[0] }
25
+ | { return [] }
26
+
27
+ rel_decl: cardinality IDENT IDENT inverse_suffix { return ASTRelation.new :lineno => val[0][2], :cardinality => val[0].first(2), :to_class_name => val[1], :name => val[2], :inverse_of_name => val[3] }
28
+
29
+ cardinality: card_number { return [val[0][0], val[0][0], val[0][1]] }
30
+ | card_number '..' card_number { return [val[0][0], val[2][0], val[0][1]] }
31
+ | card_number '+' { return [val[0][0], 1.0/0.0, val[0][1]] }
32
+
33
+ card_number: '0' { return [0, lineno] }
34
+ | '1' { return [1, lineno] }
35
+
36
+ inverse_suffix: inverseof IDENT { return val[1] }
37
+ | { return nil }
38
+
39
+ action_decl: action IDENT '(' action_args ')' block { return ASTAction.new(:lineno => val[0], :name => val[1], :arg_cardinalities => val[3][0], :arg_types => val[3][1], :arg_names => val[3][2], :block => val[5]) }
40
+
41
+ action_args: additional_args cardinality IDENT IDENT { val[0][0] << val[1]; val[0][1] << val[2]; val[0][2] << val[3]; return val[0] }
42
+ | { return [[], [], []] }
43
+
44
+ additional_args: additional_args cardinality IDENT IDENT ',' { val[0][0] << val[1]; val[0][1] << val[2]; val[0][2] << val[3]; return val[0] }
45
+ | { return [[], [], []] }
46
+
47
+ block: '{' statements '}' { return ASTBlock.new :lineno => val[0], :statements => val[1] }
48
+
49
+ statements: statement statements { val[1].unshift val[0]; return val[1] }
50
+ | { return [] }
51
+
52
+ statement: IDENT '=' objset { return ASTAssignment.new :lineno => val[0].lineno, :var_name => val[0], :objset => val[2] }
53
+ | create_objset { return ASTObjsetStmt.new :lineno => val[0].lineno, :objset => val[0] }
54
+ | delete objset { return ASTDeleteObj.new :lineno => val[0], :objset => val[1] }
55
+ | objset '.' IDENT '+=' objset { return ASTCreateTup.new :lineno => val[0].lineno, :objset1 => val[0], :rel_name => val[2], :objset2 => val[4] }
56
+ | objset '.' IDENT '-=' objset { return ASTDeleteTup.new :lineno => val[0].lineno, :objset1 => val[0], :rel_name => val[2], :objset2 => val[4] }
57
+ | objset '.' IDENT '=' objset { return ASTSetTup.new :lineno => val[0].lineno, :objset1 => val[0], :rel_name => val[2], :objset2 => val[4] }
58
+ | foreach IDENT ':' objset block { return ASTForEach.new :lineno => val[0], :var_name => val[1], :objset => val[3], :block => val[4] }
59
+ | either block or eitherblocks { val[3].unshift val[1]; return ASTEither.new :lineno => val[0], :blocks => val[3] }
60
+
61
+ eitherblocks: eitherblocks or block { val[0] << val[2]; return val[0] }
62
+ | block { return [val[0]] }
63
+
64
+ create_objset: create '(' IDENT ')' { return ASTCreateObjset.new :lineno => val[0], :class_name => val[2] }
65
+
66
+ objset: IDENT { return ASTVariable.new :lineno => val[0].lineno, :var_name => val[0] }
67
+ | subset '(' objset ')' { return ASTSubset.new :lineno => val[0], :objset => val[2] }
68
+ | oneof '(' objset ')' { return ASTOneOf.new :lineno => val[0], :objset => val[2] }
69
+ | allof '(' IDENT ')' { return ASTAllOf.new :lineno => val[0], :class_name => val[2] }
70
+ | create_objset { return val[0] }
71
+ | create '(' objset '.' IDENT ')' {
72
+ return ASTDereferenceBuild.new :lineno => val[0].lineno, :objset => val[2], :rel_name => val[4]
73
+ }
74
+ | objset '.' IDENT { return ASTDereference.new :lineno => val[0].lineno, :objset => val[0], :rel_name => val[2] }
75
+ | empty { return ASTEmptyObjset.new :lineno => val[0] }
76
+
77
+ invariant_objset: IDENT { return ASTVariable.new :lineno => val[0].lineno, :var_name => val[0] }
78
+ | subset '(' objset ')' { return ASTSubset.new :lineno => val[0], :objset => val[2] }
79
+ | allof '(' IDENT ')' { return ASTAllOf.new :lineno => val[0], :class_name => val[2] }
80
+ | invariant_objset '.' IDENT { return ASTDereference.new :lineno => val[0].lineno, :objset => val[0], :rel_name => val[2] }
81
+ | empty { return ASTEmptyObjset.new :lineno => val[0] }
82
+
83
+ invariant_decl: invariant formula { return ASTInvariant.new :lineno => val[0], :name => nil, :formula => val[1] }
84
+ | invariant IDENT ':' formula { return ASTInvariant.new :lineno => val[0], :name => val[1], :formula => val[3] }
85
+
86
+ formula: forall '(' quantifier_parameters_with_commas ':' formula ')'
87
+ { return ASTForAll.new :lineno => val[0], :vars => val[2], :subformula => val[4] }
88
+ | exists '(' quantifier_parameters_with_commas optional_formula ')'
89
+ { return ASTExists.new :lineno => val[0], :vars => val[2], :subformula => val[3] }
90
+ | not formula
91
+ { return ASTNot.new :lineno => val[0], :subformula => val[1] } =NOT
92
+ | formula and formula
93
+ { return ASTAnd.new :lineno => val[0].lineno, :subformulae => [val[0], val[2]] }
94
+ | formula or formula
95
+ { return ASTOr.new :lineno => val[0].lineno, :subformulae => [val[0], val[2]] }
96
+ | formula '<=>' formula
97
+ { return ASTEquiv.new :lineno => val[0].lineno, :subformulae => [val[0], val[2]] }
98
+ | formula '=>' formula
99
+ { return ASTImplies.new :lineno => val[0].lineno, :subformula1 => val[0], :subformula2 => val[2] }
100
+ | formula '<=' formula
101
+ { return ASTImplies.new :lineno => val[0].lineno, :subformula1 => val[2], :subformula2 => val[0] }
102
+ | '(' formula ')' { return val[1] }
103
+ | equiv '(' formula ',' formula additional_formulae ')'
104
+ { return ASTEquiv.new :lineno => val[0], :subformulae => [val[2], val[4]] + val[5] }
105
+ | implies '(' formula ',' formula ')'
106
+ { return ASTImplies.new :lineno => val[0], :subformula1 => val[2], :subformula2 => val[4] }
107
+ | invariant_objset '==' invariant_objset
108
+ { return ASTEqual.new :lineno => val[0].lineno, :objsets => [val[0], val[2]] }
109
+ | invariant_objset '!=' invariant_objset
110
+ { return ASTNot.new(:lineno => val[0].lineno, :subformula => ASTEqual.new(:lineno => val[0].lineno, :objsets => [val[0], val[2]])) }
111
+ | equal '(' invariant_objset ',' invariant_objset additional_invariant_objsets ')'
112
+ { return ASTEqual.new :lineno => val[0], :objsets => [val[2], val[4]] + val[5] }
113
+ | invariant_objset in invariant_objset { return ASTIn.new :lineno => val[0].lineno, :objset1 => val[0], :objset2 => val[2] }
114
+ | true { return ASTBoolean.new :lineno => val[0], :bool_value => true }
115
+ | false { return ASTBoolean.new :lineno => val[0], :bool_value => false }
116
+ | empty '(' invariant_objset ')' { return ASTEmpty.new :lineno => val[0], :objset => val[2] }
117
+
118
+ quantifier_parameters_with_commas: quantifier_parameters_with_commas ',' quantifier_parameter
119
+ { val[0] << val[2]; return val[0] }
120
+ | quantifier_parameter { return [val[0]] }
121
+
122
+ quantifier_parameter: IDENT IDENT { return [val[1], ASTAllOf.new(:lineno => val[0].lineno, :class_name => val[0]), val[0].lineno] }
123
+ | IDENT in objset { return [val[0], val[2], val[0].lineno] }
124
+
125
+ optional_formula: ':' formula { return val[1] }
126
+ | { return nil }
127
+
128
+ additional_formulae: additional_formulae ',' formula { val[0] << val[2]; return val[0] }
129
+ | { return [] }
130
+
131
+ additional_invariant_objsets: additional_invariant_objsets ',' invariant_objset { val[0] << val[2]; return val[0] }
132
+ | { return [] }
133
+
134
+ end
135
+
136
+ ---- header
137
+
138
+ require 'adsl/parser/adsl_parser.rex'
139
+ require 'adsl/fol/first_order_logic'
140
+
141
+ module ADSL
142
+ module Parser
143
+
144
+ ---- inner
145
+
146
+ # generated by racc
147
+ def generate_ast(str)
148
+ scan str
149
+ # do_parse
150
+ end
151
+
152
+ def parse(str)
153
+ generate_ast(str).typecheck_and_resolve
154
+ end
155
+
156
+ ---- footer
157
+
158
+ end
159
+ end
@@ -1,6 +1,6 @@
1
- require 'parser/adsl_ast'
1
+ require 'adsl/parser/ast_nodes'
2
2
 
3
- class ADSL::ADSLParser
3
+ class ADSL::Parser::ADSLParser
4
4
  macro
5
5
  rule
6
6
  \/\/[^\n\z]* # comment, no action
@@ -17,7 +17,7 @@ rule
17
17
  or\b { [:or, lineno] }
18
18
  subset\b { [:subset, lineno] }
19
19
  oneof\b { [:oneof, lineno] }
20
- \.\s*all\b { [:dotall, lineno] }
20
+ allof\b { [:allof, lineno] }
21
21
  forall\b { [:forall, lineno] }
22
22
  exists\b { [:exists, lineno] }
23
23
  in\b { [:in, lineno] }
@@ -42,7 +42,7 @@ rule
42
42
  = { [text, lineno] }
43
43
  \+ { [text, lineno] }
44
44
  [01] { [text, lineno] }
45
- \w+ { [:IDENT, ADSL::ADSLIdent.new(:lineno => lineno, :text => text)] }
45
+ \w+ { [:IDENT, ADSL::Parser::ASTIdent.new(:lineno => lineno, :text => text)] }
46
46
  \s # blank, no action
47
47
  . { [:unknown_symbol, [text, lineno]] }
48
48
  end
@@ -1,13 +1,13 @@
1
1
  #--
2
2
  # DO NOT MODIFY!!!!
3
3
  # This file is automatically generated by rex 1.0.5
4
- # from lexical definition file "./lib/parser/adsl_parser.rex".
4
+ # from lexical definition file "./lib/adsl/parser/adsl_parser.rex".
5
5
  #++
6
6
 
7
7
  require 'racc/parser'
8
- require 'parser/adsl_ast'
8
+ require 'adsl/parser/ast_nodes'
9
9
 
10
- class ADSL::ADSLParser < Racc::Parser
10
+ class ADSL::Parser::ADSLParser < Racc::Parser
11
11
  require 'strscan'
12
12
 
13
13
  class ScanError < StandardError ; end
@@ -101,8 +101,8 @@ class ADSL::ADSLParser < Racc::Parser
101
101
  when (text = @ss.scan(/oneof\b/))
102
102
  action { [:oneof, lineno] }
103
103
 
104
- when (text = @ss.scan(/\.\s*all\b/))
105
- action { [:dotall, lineno] }
104
+ when (text = @ss.scan(/allof\b/))
105
+ action { [:allof, lineno] }
106
106
 
107
107
  when (text = @ss.scan(/forall\b/))
108
108
  action { [:forall, lineno] }
@@ -177,7 +177,7 @@ class ADSL::ADSLParser < Racc::Parser
177
177
  action { [text, lineno] }
178
178
 
179
179
  when (text = @ss.scan(/\w+/))
180
- action { [:IDENT, ADSL::ADSLIdent.new(:lineno => lineno, :text => text)] }
180
+ action { [:IDENT, ADSL::Parser::ASTIdent.new(:lineno => lineno, :text => text)] }
181
181
 
182
182
  when (text = @ss.scan(/\s/))
183
183
  ;
@@ -0,0 +1,1031 @@
1
+ #
2
+ # DO NOT MODIFY!!!!
3
+ # This file is automatically generated by Racc 1.4.9
4
+ # from Racc grammer file "".
5
+ #
6
+
7
+ require 'racc/parser.rb'
8
+
9
+
10
+ require 'adsl/parser/adsl_parser.rex'
11
+ require 'adsl/fol/first_order_logic'
12
+
13
+ module ADSL
14
+ module Parser
15
+
16
+ class ADSLParser < Racc::Parser
17
+
18
+ module_eval(<<'...end adsl_parser.racc/module_eval...', 'adsl_parser.racc', 145)
19
+
20
+ # generated by racc
21
+ def generate_ast(str)
22
+ scan str
23
+ # do_parse
24
+ end
25
+
26
+ def parse(str)
27
+ generate_ast(str).typecheck_and_resolve
28
+ end
29
+
30
+ ...end adsl_parser.racc/module_eval...
31
+ ##### State transition tables begin ###
32
+
33
+ racc_action_table = [
34
+ 38, 39, 44, 46, 45, 42, 43, 44, 46, 45,
35
+ 42, 43, 44, 46, 45, 42, 43, 44, 46, 45,
36
+ 42, 43, 32, 40, 44, 46, 45, 42, 43, 119,
37
+ 144, 145, 60, 142, 62, 63, 64, 108, 112, 101,
38
+ 171, 67, 37, 111, 31, 107, 106, 84, 140, 106,
39
+ 119, 110, 154, 16, 105, 17, 120, 21, 22, 152,
40
+ 19, 28, 29, 23, 27, 25, 26, 49, 16, 113,
41
+ 17, 37, 21, 22, 24, 19, 28, 29, 23, 27,
42
+ 25, 26, 49, 16, -20, 17, 56, 21, 22, 24,
43
+ 19, 28, 29, 23, 27, 25, 26, 49, 16, 54,
44
+ 17, 125, 21, 22, 24, 19, 28, 29, 23, 27,
45
+ 25, 26, 49, 16, 126, 17, 53, 21, 22, 24,
46
+ 19, 28, 29, 23, 27, 25, 26, 49, 16, 82,
47
+ 17, 52, 21, 22, 24, 19, 28, 29, 23, 27,
48
+ 25, 26, 49, 16, 130, 17, 48, 21, 22, 24,
49
+ 19, 28, 29, 23, 27, 25, 26, 49, 16, 47,
50
+ 17, 68, 21, 22, 24, 19, 28, 29, 23, 27,
51
+ 25, 26, 49, 16, 41, 17, 135, 21, 22, 24,
52
+ 19, 28, 29, 23, 27, 25, 26, 15, 16, 69,
53
+ 17, 44, 21, 22, 24, 19, 28, 29, 23, 27,
54
+ 25, 26, 49, 16, 36, 17, 146, 21, 22, 24,
55
+ 19, 28, 29, 23, 27, 25, 26, 49, 16, 147,
56
+ 17, 148, 21, 22, 24, 19, 28, 29, 23, 27,
57
+ 25, 26, 49, 16, 44, 17, 37, 21, 22, 24,
58
+ 19, 28, 29, 23, 27, 25, 26, 49, 16, 151,
59
+ 17, 35, 21, 22, 24, 19, 28, 29, 23, 27,
60
+ 25, 26, 49, 16, 101, 17, 37, 21, 22, 24,
61
+ 19, 28, 29, 23, 27, 25, 26, 49, 16, 37,
62
+ 17, 34, 21, 22, 24, 19, 28, 29, 23, 27,
63
+ 25, 26, 49, 44, 46, 45, 42, 43, 37, 24,
64
+ 144, 145, 60, 142, 62, 63, 64, 44, 46, 45,
65
+ 60, 67, 62, 63, 64, 44, 46, 45, 140, 67,
66
+ 60, 157, 62, 63, 64, 158, 121, 82, 60, 67,
67
+ 62, 63, 64, 92, 93, 160, 61, 67, 60, -41,
68
+ 62, 63, 64, 33, 61, 162, 60, 67, 62, 63,
69
+ 64, 169, 170, 163, 61, 67, 60, 119, 62, 63,
70
+ 64, 165, 61, 166, 60, 67, 62, 63, 64, 92,
71
+ 93, 103, 61, 67, 60, 100, 62, 63, 64, 114,
72
+ 61, 30, 60, 67, 62, 63, 64, 167, 168, 101,
73
+ 61, 67, 60, 173, 62, 63, 64, 174, 61, 175,
74
+ 60, 67, 62, 63, 64, 16, 176, 17, 61, 67,
75
+ 14, 16, 71, 17, 13, 16, 61, 17, 71, 49,
76
+ 101, 16, 71, 17, 16, 49, 17, 99, 71, 49,
77
+ 16, 71, 17, 98, 16, 49, 17, 71, 49, 6,
78
+ 6, 71, 7, 7, 49, 119, 6, 97, 49, 7,
79
+ 8, 8, 6, 150, 37, 7, 101, 8, 44, 46,
80
+ 45, 42, 43, 8, 44, 46, 45, 42, 43, 88,
81
+ 95, 137, 92, 93, 92, 93, 44, 46, 45, 42,
82
+ 43, 44, 46, 45, 42, 43, 104, 94, 181, 37,
83
+ 179, 180, 149, 102, 9, 101, 101, 115, 116, 82,
84
+ 189, 101, 101, 101, 119 ]
85
+
86
+ racc_action_check = [
87
+ 18, 18, 86, 86, 86, 86, 86, 85, 85, 85,
88
+ 85, 85, 51, 51, 51, 51, 51, 133, 133, 133,
89
+ 133, 133, 13, 18, 127, 127, 127, 127, 127, 182,
90
+ 119, 119, 119, 119, 119, 119, 119, 82, 86, 182,
91
+ 157, 119, 18, 85, 13, 82, 83, 51, 119, 80,
92
+ 95, 83, 133, 53, 80, 53, 96, 53, 53, 127,
93
+ 53, 53, 53, 53, 53, 53, 53, 53, 43, 87,
94
+ 43, 87, 43, 43, 53, 43, 43, 43, 43, 43,
95
+ 43, 43, 43, 168, 33, 168, 32, 168, 168, 43,
96
+ 168, 168, 168, 168, 168, 168, 168, 168, 42, 27,
97
+ 42, 100, 42, 42, 168, 42, 42, 42, 42, 42,
98
+ 42, 42, 42, 44, 101, 44, 26, 44, 44, 42,
99
+ 44, 44, 44, 44, 44, 44, 44, 44, 45, 106,
100
+ 45, 25, 45, 45, 44, 45, 45, 45, 45, 45,
101
+ 45, 45, 45, 52, 109, 52, 22, 52, 52, 45,
102
+ 52, 52, 52, 52, 52, 52, 52, 52, 46, 21,
103
+ 46, 36, 46, 46, 52, 46, 46, 46, 46, 46,
104
+ 46, 46, 46, 8, 19, 8, 114, 8, 8, 46,
105
+ 8, 8, 8, 8, 8, 8, 8, 8, 105, 37,
106
+ 105, 79, 105, 105, 8, 105, 105, 105, 105, 105,
107
+ 105, 105, 105, 111, 17, 111, 120, 111, 111, 105,
108
+ 111, 111, 111, 111, 111, 111, 111, 111, 110, 121,
109
+ 110, 122, 110, 110, 111, 110, 110, 110, 110, 110,
110
+ 110, 110, 110, 23, 78, 23, 73, 23, 23, 110,
111
+ 23, 23, 23, 23, 23, 23, 23, 23, 24, 125,
112
+ 24, 16, 24, 24, 23, 24, 24, 24, 24, 24,
113
+ 24, 24, 24, 34, 129, 34, 72, 34, 34, 24,
114
+ 34, 34, 34, 34, 34, 34, 34, 34, 112, 70,
115
+ 112, 15, 112, 112, 34, 112, 112, 112, 112, 112,
116
+ 112, 112, 112, 177, 177, 177, 177, 177, 134, 112,
117
+ 139, 139, 139, 139, 139, 139, 139, 76, 76, 76,
118
+ 97, 139, 97, 97, 97, 75, 75, 75, 139, 97,
119
+ 98, 135, 98, 98, 98, 138, 97, 48, 35, 98,
120
+ 35, 35, 35, 115, 115, 140, 98, 35, 99, 141,
121
+ 99, 99, 99, 14, 35, 143, 108, 99, 108, 108,
122
+ 108, 155, 155, 144, 99, 108, 181, 145, 181, 181,
123
+ 181, 146, 108, 148, 180, 181, 180, 180, 180, 58,
124
+ 58, 68, 181, 180, 179, 64, 179, 179, 179, 90,
125
+ 180, 9, 174, 179, 174, 174, 174, 153, 153, 161,
126
+ 179, 174, 160, 162, 160, 160, 160, 163, 174, 164,
127
+ 142, 160, 142, 142, 142, 170, 166, 170, 160, 142,
128
+ 7, 41, 170, 41, 6, 40, 142, 40, 41, 170,
129
+ 172, 54, 40, 54, 39, 41, 39, 63, 54, 40,
130
+ 38, 39, 38, 62, 113, 54, 113, 38, 39, 0,
131
+ 5, 113, 0, 5, 38, 175, 3, 60, 113, 3,
132
+ 0, 5, 4, 124, 178, 4, 124, 3, 59, 59,
133
+ 59, 59, 59, 4, 20, 20, 20, 20, 20, 55,
134
+ 57, 117, 55, 55, 117, 117, 132, 132, 132, 132,
135
+ 132, 131, 131, 131, 131, 131, 74, 56, 173, 74,
136
+ 173, 173, 123, 66, 1, 123, 66, 91, 91, 47,
137
+ 183, 185, 186, 187, 189 ]
138
+
139
+ racc_action_pointer = [
140
+ 428, 494, nil, 435, 441, 429, 381, 377, 154, 381,
141
+ nil, nil, nil, 10, 303, 234, 211, 164, -2, 134,
142
+ 458, 119, 106, 214, 229, 91, 76, 59, nil, nil,
143
+ nil, nil, 53, 43, 244, 311, 128, 156, 411, 405,
144
+ 396, 392, 79, 49, 94, 109, 139, 466, 294, nil,
145
+ nil, 6, 124, 34, 402, 434, 453, 429, 331, 452,
146
+ 407, nil, 393, 387, 335, nil, 452, nil, 330, nil,
147
+ 235, nil, 222, 192, 445, 309, 301, nil, 228, 185,
148
+ 7, nil, 12, 4, nil, 1, -4, 27, nil, nil,
149
+ 346, 461, nil, nil, nil, 16, 23, 293, 303, 321,
150
+ 68, 81, nil, nil, nil, 169, 96, nil, 329, 103,
151
+ 199, 184, 259, 415, 143, 295, nil, 436, nil, 15,
152
+ 173, 178, 177, 451, 412, 208, nil, 18, nil, 220,
153
+ nil, 475, 470, 11, 254, 308, nil, nil, 290, 285,
154
+ 292, 295, 383, 301, 320, 323, 319, nil, 330, nil,
155
+ nil, nil, nil, 346, nil, 310, nil, 7, nil, nil,
156
+ 375, 345, 360, 350, 389, nil, 365, nil, 64, nil,
157
+ 386, nil, 376, 445, 365, 411, nil, 287, 410, 357,
158
+ 347, 339, -5, 490, nil, 457, 458, 459, nil, 470,
159
+ nil ]
160
+
161
+ racc_action_default = [
162
+ -5, -80, -1, -5, -5, -5, -80, -80, -80, -80,
163
+ -2, -3, -4, -80, -80, -45, -80, -80, -80, -49,
164
+ -50, -80, -80, -80, -80, -80, -80, -80, -67, -68,
165
+ 191, -9, -80, -22, -80, -80, -80, -80, -80, -80,
166
+ -80, -80, -80, -80, -80, -80, -80, -80, -80, -45,
167
+ -54, -80, -80, -80, -80, -80, -80, -80, -80, -51,
168
+ -80, -37, -80, -80, -80, -41, -80, -44, -80, -48,
169
+ -63, -49, -64, -66, -80, -55, -56, -57, -58, -59,
170
+ -80, -71, -80, -75, -60, -80, -80, -80, -6, -8,
171
+ -80, -11, -14, -15, -9, -80, -80, -80, -80, -80,
172
+ -80, -80, -46, -47, -69, -80, -80, -72, -80, -80,
173
+ -80, -80, -80, -80, -80, -80, -13, -80, -18, -25,
174
+ -80, -37, -80, -80, -80, -80, -43, -80, -70, -73,
175
+ -53, -74, -77, -80, -79, -17, -12, -7, -80, -25,
176
+ -37, -27, -80, -80, -80, -80, -19, -36, -80, -38,
177
+ -39, -40, -52, -80, -62, -80, -10, -80, -23, -24,
178
+ -80, -28, -80, -80, -80, -21, -43, -61, -80, -65,
179
+ -80, -16, -26, -43, -80, -80, -42, -76, -78, -80,
180
+ -80, -80, -80, -33, -35, -29, -30, -31, -32, -80,
181
+ -34 ]
182
+
183
+ racc_goto_table = [
184
+ 20, 66, 70, 72, 73, 74, 118, 55, 138, 141,
185
+ 80, 83, 1, 58, 57, 50, 51, 2, 87, 183,
186
+ 10, 11, 12, 136, 156, 96, 59, 109, 159, 141,
187
+ 153, 155, 128, nil, 75, 76, 77, 78, 79, nil,
188
+ nil, nil, nil, nil, 85, 86, nil, nil, nil, nil,
189
+ nil, nil, nil, nil, nil, nil, 164, nil, nil, nil,
190
+ nil, nil, nil, 122, 123, 124, nil, nil, nil, nil,
191
+ 117, nil, nil, nil, 129, nil, nil, 134, nil, nil,
192
+ nil, nil, nil, nil, nil, nil, 184, nil, nil, nil,
193
+ nil, nil, nil, 188, nil, nil, nil, 127, nil, nil,
194
+ 190, nil, 131, 132, 133, nil, nil, nil, 161, nil,
195
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
196
+ nil, nil, nil, nil, nil, nil, 172, nil, nil, nil,
197
+ nil, nil, nil, nil, 178, nil, nil, nil, nil, nil,
198
+ 182, nil, nil, nil, nil, 185, 186, 187, nil, nil,
199
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
200
+ 177 ]
201
+
202
+ racc_goto_check = [
203
+ 20, 16, 19, 19, 19, 19, 12, 6, 14, 17,
204
+ 21, 21, 1, 13, 11, 20, 20, 2, 19, 18,
205
+ 2, 2, 2, 10, 9, 8, 20, 22, 14, 17,
206
+ 23, 24, 25, nil, 20, 20, 20, 20, 20, nil,
207
+ nil, nil, nil, nil, 20, 20, nil, nil, nil, nil,
208
+ nil, nil, nil, nil, nil, nil, 12, nil, nil, nil,
209
+ nil, nil, nil, 16, 16, 16, nil, nil, nil, nil,
210
+ 6, nil, nil, nil, 16, nil, nil, 19, nil, nil,
211
+ nil, nil, nil, nil, nil, nil, 12, nil, nil, nil,
212
+ nil, nil, nil, 12, nil, nil, nil, 20, nil, nil,
213
+ 12, nil, 20, 20, 20, nil, nil, nil, 16, nil,
214
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
215
+ nil, nil, nil, nil, nil, nil, 16, nil, nil, nil,
216
+ nil, nil, nil, nil, 19, nil, nil, nil, nil, nil,
217
+ 16, nil, nil, nil, nil, 16, 16, 16, nil, nil,
218
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
219
+ 20 ]
220
+
221
+ racc_goto_pointer = [
222
+ nil, 12, 17, nil, nil, nil, -24, nil, -33, -111,
223
+ -92, -19, -89, -20, -111, nil, -34, -110, -156, -36,
224
+ -8, -37, -56, -102, -103, -74 ]
225
+
226
+ racc_goto_default = [
227
+ nil, nil, nil, 3, 4, 5, nil, 89, 90, nil,
228
+ 91, nil, nil, nil, nil, 139, 143, 65, nil, 18,
229
+ nil, nil, nil, nil, nil, 81 ]
230
+
231
+ racc_reduce_table = [
232
+ 0, 0, :racc_error,
233
+ 1, 49, :_reduce_1,
234
+ 2, 50, :_reduce_2,
235
+ 2, 50, :_reduce_3,
236
+ 2, 50, :_reduce_4,
237
+ 0, 50, :_reduce_5,
238
+ 5, 51, :_reduce_6,
239
+ 7, 51, :_reduce_7,
240
+ 2, 54, :_reduce_8,
241
+ 0, 54, :_reduce_9,
242
+ 4, 55, :_reduce_10,
243
+ 1, 56, :_reduce_11,
244
+ 3, 56, :_reduce_12,
245
+ 2, 56, :_reduce_13,
246
+ 1, 58, :_reduce_14,
247
+ 1, 58, :_reduce_15,
248
+ 2, 57, :_reduce_16,
249
+ 0, 57, :_reduce_17,
250
+ 6, 52, :_reduce_18,
251
+ 4, 59, :_reduce_19,
252
+ 0, 59, :_reduce_20,
253
+ 5, 61, :_reduce_21,
254
+ 0, 61, :_reduce_22,
255
+ 3, 60, :_reduce_23,
256
+ 2, 62, :_reduce_24,
257
+ 0, 62, :_reduce_25,
258
+ 3, 63, :_reduce_26,
259
+ 1, 63, :_reduce_27,
260
+ 2, 63, :_reduce_28,
261
+ 5, 63, :_reduce_29,
262
+ 5, 63, :_reduce_30,
263
+ 5, 63, :_reduce_31,
264
+ 5, 63, :_reduce_32,
265
+ 4, 63, :_reduce_33,
266
+ 3, 66, :_reduce_34,
267
+ 1, 66, :_reduce_35,
268
+ 4, 65, :_reduce_36,
269
+ 1, 64, :_reduce_37,
270
+ 4, 64, :_reduce_38,
271
+ 4, 64, :_reduce_39,
272
+ 4, 64, :_reduce_40,
273
+ 1, 64, :_reduce_41,
274
+ 6, 64, :_reduce_42,
275
+ 3, 64, :_reduce_43,
276
+ 1, 64, :_reduce_44,
277
+ 1, 67, :_reduce_45,
278
+ 4, 67, :_reduce_46,
279
+ 4, 67, :_reduce_47,
280
+ 3, 67, :_reduce_48,
281
+ 1, 67, :_reduce_49,
282
+ 2, 53, :_reduce_50,
283
+ 4, 53, :_reduce_51,
284
+ 6, 68, :_reduce_52,
285
+ 5, 68, :_reduce_53,
286
+ 2, 68, :_reduce_54,
287
+ 3, 68, :_reduce_55,
288
+ 3, 68, :_reduce_56,
289
+ 3, 68, :_reduce_57,
290
+ 3, 68, :_reduce_58,
291
+ 3, 68, :_reduce_59,
292
+ 3, 68, :_reduce_60,
293
+ 7, 68, :_reduce_61,
294
+ 6, 68, :_reduce_62,
295
+ 3, 68, :_reduce_63,
296
+ 3, 68, :_reduce_64,
297
+ 7, 68, :_reduce_65,
298
+ 3, 68, :_reduce_66,
299
+ 1, 68, :_reduce_67,
300
+ 1, 68, :_reduce_68,
301
+ 4, 68, :_reduce_69,
302
+ 3, 69, :_reduce_70,
303
+ 1, 69, :_reduce_71,
304
+ 2, 73, :_reduce_72,
305
+ 3, 73, :_reduce_73,
306
+ 2, 70, :_reduce_74,
307
+ 0, 70, :_reduce_75,
308
+ 3, 71, :_reduce_76,
309
+ 0, 71, :_reduce_77,
310
+ 3, 72, :_reduce_78,
311
+ 0, 72, :_reduce_79 ]
312
+
313
+ racc_reduce_n = 80
314
+
315
+ racc_shift_n = 191
316
+
317
+ racc_token_table = {
318
+ false => 0,
319
+ :error => 1,
320
+ "==" => 2,
321
+ "!=" => 3,
322
+ :noassoc => 4,
323
+ :NOT => 5,
324
+ "<=>" => 6,
325
+ "<=" => 7,
326
+ "=>" => 8,
327
+ :and => 9,
328
+ :or => 10,
329
+ :class => 11,
330
+ :extends => 12,
331
+ :inverseof => 13,
332
+ :action => 14,
333
+ :foreach => 15,
334
+ :either => 16,
335
+ :create => 17,
336
+ :delete => 18,
337
+ :subset => 19,
338
+ :oneof => 20,
339
+ :allof => 21,
340
+ :invariant => 22,
341
+ :forall => 23,
342
+ :exists => 24,
343
+ :in => 25,
344
+ :empty => 26,
345
+ :true => 27,
346
+ :false => 28,
347
+ :not => 29,
348
+ :equal => 30,
349
+ :equiv => 31,
350
+ :implies => 32,
351
+ :IDENT => 33,
352
+ "{" => 34,
353
+ "}" => 35,
354
+ ".." => 36,
355
+ "+" => 37,
356
+ "0" => 38,
357
+ "1" => 39,
358
+ "(" => 40,
359
+ ")" => 41,
360
+ "," => 42,
361
+ "=" => 43,
362
+ "." => 44,
363
+ "+=" => 45,
364
+ "-=" => 46,
365
+ ":" => 47 }
366
+
367
+ racc_nt_base = 48
368
+
369
+ racc_use_result_var = true
370
+
371
+ Racc_arg = [
372
+ racc_action_table,
373
+ racc_action_check,
374
+ racc_action_default,
375
+ racc_action_pointer,
376
+ racc_goto_table,
377
+ racc_goto_check,
378
+ racc_goto_default,
379
+ racc_goto_pointer,
380
+ racc_nt_base,
381
+ racc_reduce_table,
382
+ racc_token_table,
383
+ racc_shift_n,
384
+ racc_reduce_n,
385
+ racc_use_result_var ]
386
+
387
+ Racc_token_to_s_table = [
388
+ "$end",
389
+ "error",
390
+ "\"==\"",
391
+ "\"!=\"",
392
+ "noassoc",
393
+ "NOT",
394
+ "\"<=>\"",
395
+ "\"<=\"",
396
+ "\"=>\"",
397
+ "and",
398
+ "or",
399
+ "class",
400
+ "extends",
401
+ "inverseof",
402
+ "action",
403
+ "foreach",
404
+ "either",
405
+ "create",
406
+ "delete",
407
+ "subset",
408
+ "oneof",
409
+ "allof",
410
+ "invariant",
411
+ "forall",
412
+ "exists",
413
+ "in",
414
+ "empty",
415
+ "true",
416
+ "false",
417
+ "not",
418
+ "equal",
419
+ "equiv",
420
+ "implies",
421
+ "IDENT",
422
+ "\"{\"",
423
+ "\"}\"",
424
+ "\"..\"",
425
+ "\"+\"",
426
+ "\"0\"",
427
+ "\"1\"",
428
+ "\"(\"",
429
+ "\")\"",
430
+ "\",\"",
431
+ "\"=\"",
432
+ "\".\"",
433
+ "\"+=\"",
434
+ "\"-=\"",
435
+ "\":\"",
436
+ "$start",
437
+ "adslspec",
438
+ "root_elems",
439
+ "class_decl",
440
+ "action_decl",
441
+ "invariant_decl",
442
+ "rel_decls",
443
+ "rel_decl",
444
+ "cardinality",
445
+ "inverse_suffix",
446
+ "card_number",
447
+ "action_args",
448
+ "block",
449
+ "additional_args",
450
+ "statements",
451
+ "statement",
452
+ "objset",
453
+ "create_objset",
454
+ "eitherblocks",
455
+ "invariant_objset",
456
+ "formula",
457
+ "quantifier_parameters_with_commas",
458
+ "optional_formula",
459
+ "additional_formulae",
460
+ "additional_invariant_objsets",
461
+ "quantifier_parameter" ]
462
+
463
+ Racc_debug_parser = false
464
+
465
+ ##### State transition tables end #####
466
+
467
+ # reduce 0 omitted
468
+
469
+ module_eval(<<'.,.,', 'adsl_parser.racc', 11)
470
+ def _reduce_1(val, _values, result)
471
+ return ASTSpec.new :lineno => lineno, :classes => val[0][0], :actions => val[0][1], :invariants => val[0][2]
472
+ result
473
+ end
474
+ .,.,
475
+
476
+ module_eval(<<'.,.,', 'adsl_parser.racc', 13)
477
+ def _reduce_2(val, _values, result)
478
+ val[1][0].unshift val[0]; return val[1]
479
+ result
480
+ end
481
+ .,.,
482
+
483
+ module_eval(<<'.,.,', 'adsl_parser.racc', 14)
484
+ def _reduce_3(val, _values, result)
485
+ val[1][1].unshift val[0]; return val[1]
486
+ result
487
+ end
488
+ .,.,
489
+
490
+ module_eval(<<'.,.,', 'adsl_parser.racc', 15)
491
+ def _reduce_4(val, _values, result)
492
+ val[1][2].unshift val[0]; return val[1]
493
+ result
494
+ end
495
+ .,.,
496
+
497
+ module_eval(<<'.,.,', 'adsl_parser.racc', 16)
498
+ def _reduce_5(val, _values, result)
499
+ return [[], [], []]
500
+ result
501
+ end
502
+ .,.,
503
+
504
+ module_eval(<<'.,.,', 'adsl_parser.racc', 19)
505
+ def _reduce_6(val, _values, result)
506
+ return ASTClass.new :lineno => val[0], :name => val[1], :relations => val[3]
507
+ result
508
+ end
509
+ .,.,
510
+
511
+ module_eval(<<'.,.,', 'adsl_parser.racc', 21)
512
+ def _reduce_7(val, _values, result)
513
+ return ASTClass.new :lineno => val[0], :name => val[1], :parent_name => val[3], :relations => val[5]
514
+ result
515
+ end
516
+ .,.,
517
+
518
+ module_eval(<<'.,.,', 'adsl_parser.racc', 23)
519
+ def _reduce_8(val, _values, result)
520
+ val[0] << val[1]; return val[0]
521
+ result
522
+ end
523
+ .,.,
524
+
525
+ module_eval(<<'.,.,', 'adsl_parser.racc', 24)
526
+ def _reduce_9(val, _values, result)
527
+ return []
528
+ result
529
+ end
530
+ .,.,
531
+
532
+ module_eval(<<'.,.,', 'adsl_parser.racc', 26)
533
+ def _reduce_10(val, _values, result)
534
+ return ASTRelation.new :lineno => val[0][2], :cardinality => val[0].first(2), :to_class_name => val[1], :name => val[2], :inverse_of_name => val[3]
535
+ result
536
+ end
537
+ .,.,
538
+
539
+ module_eval(<<'.,.,', 'adsl_parser.racc', 28)
540
+ def _reduce_11(val, _values, result)
541
+ return [val[0][0], val[0][0], val[0][1]]
542
+ result
543
+ end
544
+ .,.,
545
+
546
+ module_eval(<<'.,.,', 'adsl_parser.racc', 29)
547
+ def _reduce_12(val, _values, result)
548
+ return [val[0][0], val[2][0], val[0][1]]
549
+ result
550
+ end
551
+ .,.,
552
+
553
+ module_eval(<<'.,.,', 'adsl_parser.racc', 30)
554
+ def _reduce_13(val, _values, result)
555
+ return [val[0][0], 1.0/0.0, val[0][1]]
556
+ result
557
+ end
558
+ .,.,
559
+
560
+ module_eval(<<'.,.,', 'adsl_parser.racc', 32)
561
+ def _reduce_14(val, _values, result)
562
+ return [0, lineno]
563
+ result
564
+ end
565
+ .,.,
566
+
567
+ module_eval(<<'.,.,', 'adsl_parser.racc', 33)
568
+ def _reduce_15(val, _values, result)
569
+ return [1, lineno]
570
+ result
571
+ end
572
+ .,.,
573
+
574
+ module_eval(<<'.,.,', 'adsl_parser.racc', 35)
575
+ def _reduce_16(val, _values, result)
576
+ return val[1]
577
+ result
578
+ end
579
+ .,.,
580
+
581
+ module_eval(<<'.,.,', 'adsl_parser.racc', 36)
582
+ def _reduce_17(val, _values, result)
583
+ return nil
584
+ result
585
+ end
586
+ .,.,
587
+
588
+ module_eval(<<'.,.,', 'adsl_parser.racc', 38)
589
+ def _reduce_18(val, _values, result)
590
+ return ASTAction.new(:lineno => val[0], :name => val[1], :arg_cardinalities => val[3][0], :arg_types => val[3][1], :arg_names => val[3][2], :block => val[5])
591
+ result
592
+ end
593
+ .,.,
594
+
595
+ module_eval(<<'.,.,', 'adsl_parser.racc', 40)
596
+ def _reduce_19(val, _values, result)
597
+ val[0][0] << val[1]; val[0][1] << val[2]; val[0][2] << val[3]; return val[0]
598
+ result
599
+ end
600
+ .,.,
601
+
602
+ module_eval(<<'.,.,', 'adsl_parser.racc', 41)
603
+ def _reduce_20(val, _values, result)
604
+ return [[], [], []]
605
+ result
606
+ end
607
+ .,.,
608
+
609
+ module_eval(<<'.,.,', 'adsl_parser.racc', 43)
610
+ def _reduce_21(val, _values, result)
611
+ val[0][0] << val[1]; val[0][1] << val[2]; val[0][2] << val[3]; return val[0]
612
+ result
613
+ end
614
+ .,.,
615
+
616
+ module_eval(<<'.,.,', 'adsl_parser.racc', 44)
617
+ def _reduce_22(val, _values, result)
618
+ return [[], [], []]
619
+ result
620
+ end
621
+ .,.,
622
+
623
+ module_eval(<<'.,.,', 'adsl_parser.racc', 46)
624
+ def _reduce_23(val, _values, result)
625
+ return ASTBlock.new :lineno => val[0], :statements => val[1]
626
+ result
627
+ end
628
+ .,.,
629
+
630
+ module_eval(<<'.,.,', 'adsl_parser.racc', 48)
631
+ def _reduce_24(val, _values, result)
632
+ val[1].unshift val[0]; return val[1]
633
+ result
634
+ end
635
+ .,.,
636
+
637
+ module_eval(<<'.,.,', 'adsl_parser.racc', 49)
638
+ def _reduce_25(val, _values, result)
639
+ return []
640
+ result
641
+ end
642
+ .,.,
643
+
644
+ module_eval(<<'.,.,', 'adsl_parser.racc', 51)
645
+ def _reduce_26(val, _values, result)
646
+ return ASTAssignment.new :lineno => val[0].lineno, :var_name => val[0], :objset => val[2]
647
+ result
648
+ end
649
+ .,.,
650
+
651
+ module_eval(<<'.,.,', 'adsl_parser.racc', 52)
652
+ def _reduce_27(val, _values, result)
653
+ return ASTObjsetStmt.new :lineno => val[0].lineno, :objset => val[0]
654
+ result
655
+ end
656
+ .,.,
657
+
658
+ module_eval(<<'.,.,', 'adsl_parser.racc', 53)
659
+ def _reduce_28(val, _values, result)
660
+ return ASTDeleteObj.new :lineno => val[0], :objset => val[1]
661
+ result
662
+ end
663
+ .,.,
664
+
665
+ module_eval(<<'.,.,', 'adsl_parser.racc', 54)
666
+ def _reduce_29(val, _values, result)
667
+ return ASTCreateTup.new :lineno => val[0].lineno, :objset1 => val[0], :rel_name => val[2], :objset2 => val[4]
668
+ result
669
+ end
670
+ .,.,
671
+
672
+ module_eval(<<'.,.,', 'adsl_parser.racc', 55)
673
+ def _reduce_30(val, _values, result)
674
+ return ASTDeleteTup.new :lineno => val[0].lineno, :objset1 => val[0], :rel_name => val[2], :objset2 => val[4]
675
+ result
676
+ end
677
+ .,.,
678
+
679
+ module_eval(<<'.,.,', 'adsl_parser.racc', 56)
680
+ def _reduce_31(val, _values, result)
681
+ return ASTSetTup.new :lineno => val[0].lineno, :objset1 => val[0], :rel_name => val[2], :objset2 => val[4]
682
+ result
683
+ end
684
+ .,.,
685
+
686
+ module_eval(<<'.,.,', 'adsl_parser.racc', 57)
687
+ def _reduce_32(val, _values, result)
688
+ return ASTForEach.new :lineno => val[0], :var_name => val[1], :objset => val[3], :block => val[4]
689
+ result
690
+ end
691
+ .,.,
692
+
693
+ module_eval(<<'.,.,', 'adsl_parser.racc', 58)
694
+ def _reduce_33(val, _values, result)
695
+ val[3].unshift val[1]; return ASTEither.new :lineno => val[0], :blocks => val[3]
696
+ result
697
+ end
698
+ .,.,
699
+
700
+ module_eval(<<'.,.,', 'adsl_parser.racc', 60)
701
+ def _reduce_34(val, _values, result)
702
+ val[0] << val[2]; return val[0]
703
+ result
704
+ end
705
+ .,.,
706
+
707
+ module_eval(<<'.,.,', 'adsl_parser.racc', 61)
708
+ def _reduce_35(val, _values, result)
709
+ return [val[0]]
710
+ result
711
+ end
712
+ .,.,
713
+
714
+ module_eval(<<'.,.,', 'adsl_parser.racc', 63)
715
+ def _reduce_36(val, _values, result)
716
+ return ASTCreateObjset.new :lineno => val[0], :class_name => val[2]
717
+ result
718
+ end
719
+ .,.,
720
+
721
+ module_eval(<<'.,.,', 'adsl_parser.racc', 65)
722
+ def _reduce_37(val, _values, result)
723
+ return ASTVariable.new :lineno => val[0].lineno, :var_name => val[0]
724
+ result
725
+ end
726
+ .,.,
727
+
728
+ module_eval(<<'.,.,', 'adsl_parser.racc', 66)
729
+ def _reduce_38(val, _values, result)
730
+ return ASTSubset.new :lineno => val[0], :objset => val[2]
731
+ result
732
+ end
733
+ .,.,
734
+
735
+ module_eval(<<'.,.,', 'adsl_parser.racc', 67)
736
+ def _reduce_39(val, _values, result)
737
+ return ASTOneOf.new :lineno => val[0], :objset => val[2]
738
+ result
739
+ end
740
+ .,.,
741
+
742
+ module_eval(<<'.,.,', 'adsl_parser.racc', 68)
743
+ def _reduce_40(val, _values, result)
744
+ return ASTAllOf.new :lineno => val[0], :class_name => val[2]
745
+ result
746
+ end
747
+ .,.,
748
+
749
+ module_eval(<<'.,.,', 'adsl_parser.racc', 69)
750
+ def _reduce_41(val, _values, result)
751
+ return val[0]
752
+ result
753
+ end
754
+ .,.,
755
+
756
+ module_eval(<<'.,.,', 'adsl_parser.racc', 71)
757
+ def _reduce_42(val, _values, result)
758
+ return ASTDereferenceBuild.new :lineno => val[0].lineno, :objset => val[2], :rel_name => val[4]
759
+
760
+ result
761
+ end
762
+ .,.,
763
+
764
+ module_eval(<<'.,.,', 'adsl_parser.racc', 73)
765
+ def _reduce_43(val, _values, result)
766
+ return ASTDereference.new :lineno => val[0].lineno, :objset => val[0], :rel_name => val[2]
767
+ result
768
+ end
769
+ .,.,
770
+
771
+ module_eval(<<'.,.,', 'adsl_parser.racc', 74)
772
+ def _reduce_44(val, _values, result)
773
+ return ASTEmptyObjset.new :lineno => val[0]
774
+ result
775
+ end
776
+ .,.,
777
+
778
+ module_eval(<<'.,.,', 'adsl_parser.racc', 76)
779
+ def _reduce_45(val, _values, result)
780
+ return ASTVariable.new :lineno => val[0].lineno, :var_name => val[0]
781
+ result
782
+ end
783
+ .,.,
784
+
785
+ module_eval(<<'.,.,', 'adsl_parser.racc', 77)
786
+ def _reduce_46(val, _values, result)
787
+ return ASTSubset.new :lineno => val[0], :objset => val[2]
788
+ result
789
+ end
790
+ .,.,
791
+
792
+ module_eval(<<'.,.,', 'adsl_parser.racc', 78)
793
+ def _reduce_47(val, _values, result)
794
+ return ASTAllOf.new :lineno => val[0], :class_name => val[2]
795
+ result
796
+ end
797
+ .,.,
798
+
799
+ module_eval(<<'.,.,', 'adsl_parser.racc', 79)
800
+ def _reduce_48(val, _values, result)
801
+ return ASTDereference.new :lineno => val[0].lineno, :objset => val[0], :rel_name => val[2]
802
+ result
803
+ end
804
+ .,.,
805
+
806
+ module_eval(<<'.,.,', 'adsl_parser.racc', 80)
807
+ def _reduce_49(val, _values, result)
808
+ return ASTEmptyObjset.new :lineno => val[0]
809
+ result
810
+ end
811
+ .,.,
812
+
813
+ module_eval(<<'.,.,', 'adsl_parser.racc', 82)
814
+ def _reduce_50(val, _values, result)
815
+ return ASTInvariant.new :lineno => val[0], :name => nil, :formula => val[1]
816
+ result
817
+ end
818
+ .,.,
819
+
820
+ module_eval(<<'.,.,', 'adsl_parser.racc', 83)
821
+ def _reduce_51(val, _values, result)
822
+ return ASTInvariant.new :lineno => val[0], :name => val[1], :formula => val[3]
823
+ result
824
+ end
825
+ .,.,
826
+
827
+ module_eval(<<'.,.,', 'adsl_parser.racc', 86)
828
+ def _reduce_52(val, _values, result)
829
+ return ASTForAll.new :lineno => val[0], :vars => val[2], :subformula => val[4]
830
+ result
831
+ end
832
+ .,.,
833
+
834
+ module_eval(<<'.,.,', 'adsl_parser.racc', 88)
835
+ def _reduce_53(val, _values, result)
836
+ return ASTExists.new :lineno => val[0], :vars => val[2], :subformula => val[3]
837
+ result
838
+ end
839
+ .,.,
840
+
841
+ module_eval(<<'.,.,', 'adsl_parser.racc', 90)
842
+ def _reduce_54(val, _values, result)
843
+ return ASTNot.new :lineno => val[0], :subformula => val[1]
844
+ result
845
+ end
846
+ .,.,
847
+
848
+ module_eval(<<'.,.,', 'adsl_parser.racc', 92)
849
+ def _reduce_55(val, _values, result)
850
+ return ASTAnd.new :lineno => val[0].lineno, :subformulae => [val[0], val[2]]
851
+ result
852
+ end
853
+ .,.,
854
+
855
+ module_eval(<<'.,.,', 'adsl_parser.racc', 94)
856
+ def _reduce_56(val, _values, result)
857
+ return ASTOr.new :lineno => val[0].lineno, :subformulae => [val[0], val[2]]
858
+ result
859
+ end
860
+ .,.,
861
+
862
+ module_eval(<<'.,.,', 'adsl_parser.racc', 96)
863
+ def _reduce_57(val, _values, result)
864
+ return ASTEquiv.new :lineno => val[0].lineno, :subformulae => [val[0], val[2]]
865
+ result
866
+ end
867
+ .,.,
868
+
869
+ module_eval(<<'.,.,', 'adsl_parser.racc', 98)
870
+ def _reduce_58(val, _values, result)
871
+ return ASTImplies.new :lineno => val[0].lineno, :subformula1 => val[0], :subformula2 => val[2]
872
+ result
873
+ end
874
+ .,.,
875
+
876
+ module_eval(<<'.,.,', 'adsl_parser.racc', 100)
877
+ def _reduce_59(val, _values, result)
878
+ return ASTImplies.new :lineno => val[0].lineno, :subformula1 => val[2], :subformula2 => val[0]
879
+ result
880
+ end
881
+ .,.,
882
+
883
+ module_eval(<<'.,.,', 'adsl_parser.racc', 101)
884
+ def _reduce_60(val, _values, result)
885
+ return val[1]
886
+ result
887
+ end
888
+ .,.,
889
+
890
+ module_eval(<<'.,.,', 'adsl_parser.racc', 103)
891
+ def _reduce_61(val, _values, result)
892
+ return ASTEquiv.new :lineno => val[0], :subformulae => [val[2], val[4]] + val[5]
893
+ result
894
+ end
895
+ .,.,
896
+
897
+ module_eval(<<'.,.,', 'adsl_parser.racc', 105)
898
+ def _reduce_62(val, _values, result)
899
+ return ASTImplies.new :lineno => val[0], :subformula1 => val[2], :subformula2 => val[4]
900
+ result
901
+ end
902
+ .,.,
903
+
904
+ module_eval(<<'.,.,', 'adsl_parser.racc', 107)
905
+ def _reduce_63(val, _values, result)
906
+ return ASTEqual.new :lineno => val[0].lineno, :objsets => [val[0], val[2]]
907
+ result
908
+ end
909
+ .,.,
910
+
911
+ module_eval(<<'.,.,', 'adsl_parser.racc', 109)
912
+ def _reduce_64(val, _values, result)
913
+ return ASTNot.new(:lineno => val[0].lineno, :subformula => ASTEqual.new(:lineno => val[0].lineno, :objsets => [val[0], val[2]]))
914
+ result
915
+ end
916
+ .,.,
917
+
918
+ module_eval(<<'.,.,', 'adsl_parser.racc', 111)
919
+ def _reduce_65(val, _values, result)
920
+ return ASTEqual.new :lineno => val[0], :objsets => [val[2], val[4]] + val[5]
921
+ result
922
+ end
923
+ .,.,
924
+
925
+ module_eval(<<'.,.,', 'adsl_parser.racc', 112)
926
+ def _reduce_66(val, _values, result)
927
+ return ASTIn.new :lineno => val[0].lineno, :objset1 => val[0], :objset2 => val[2]
928
+ result
929
+ end
930
+ .,.,
931
+
932
+ module_eval(<<'.,.,', 'adsl_parser.racc', 113)
933
+ def _reduce_67(val, _values, result)
934
+ return ASTBoolean.new :lineno => val[0], :bool_value => true
935
+ result
936
+ end
937
+ .,.,
938
+
939
+ module_eval(<<'.,.,', 'adsl_parser.racc', 114)
940
+ def _reduce_68(val, _values, result)
941
+ return ASTBoolean.new :lineno => val[0], :bool_value => false
942
+ result
943
+ end
944
+ .,.,
945
+
946
+ module_eval(<<'.,.,', 'adsl_parser.racc', 115)
947
+ def _reduce_69(val, _values, result)
948
+ return ASTEmpty.new :lineno => val[0], :objset => val[2]
949
+ result
950
+ end
951
+ .,.,
952
+
953
+ module_eval(<<'.,.,', 'adsl_parser.racc', 118)
954
+ def _reduce_70(val, _values, result)
955
+ val[0] << val[2]; return val[0]
956
+ result
957
+ end
958
+ .,.,
959
+
960
+ module_eval(<<'.,.,', 'adsl_parser.racc', 119)
961
+ def _reduce_71(val, _values, result)
962
+ return [val[0]]
963
+ result
964
+ end
965
+ .,.,
966
+
967
+ module_eval(<<'.,.,', 'adsl_parser.racc', 121)
968
+ def _reduce_72(val, _values, result)
969
+ return [val[1], ASTAllOf.new(:lineno => val[0].lineno, :class_name => val[0]), val[0].lineno]
970
+ result
971
+ end
972
+ .,.,
973
+
974
+ module_eval(<<'.,.,', 'adsl_parser.racc', 122)
975
+ def _reduce_73(val, _values, result)
976
+ return [val[0], val[2], val[0].lineno]
977
+ result
978
+ end
979
+ .,.,
980
+
981
+ module_eval(<<'.,.,', 'adsl_parser.racc', 124)
982
+ def _reduce_74(val, _values, result)
983
+ return val[1]
984
+ result
985
+ end
986
+ .,.,
987
+
988
+ module_eval(<<'.,.,', 'adsl_parser.racc', 125)
989
+ def _reduce_75(val, _values, result)
990
+ return nil
991
+ result
992
+ end
993
+ .,.,
994
+
995
+ module_eval(<<'.,.,', 'adsl_parser.racc', 127)
996
+ def _reduce_76(val, _values, result)
997
+ val[0] << val[2]; return val[0]
998
+ result
999
+ end
1000
+ .,.,
1001
+
1002
+ module_eval(<<'.,.,', 'adsl_parser.racc', 128)
1003
+ def _reduce_77(val, _values, result)
1004
+ return []
1005
+ result
1006
+ end
1007
+ .,.,
1008
+
1009
+ module_eval(<<'.,.,', 'adsl_parser.racc', 130)
1010
+ def _reduce_78(val, _values, result)
1011
+ val[0] << val[2]; return val[0]
1012
+ result
1013
+ end
1014
+ .,.,
1015
+
1016
+ module_eval(<<'.,.,', 'adsl_parser.racc', 131)
1017
+ def _reduce_79(val, _values, result)
1018
+ return []
1019
+ result
1020
+ end
1021
+ .,.,
1022
+
1023
+ def _reduce_none(val, _values, result)
1024
+ val[0]
1025
+ end
1026
+
1027
+ end # class ADSLParser
1028
+
1029
+
1030
+ end
1031
+ end