bel_parser 1.0.0.alpha.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 (182) hide show
  1. checksums.yaml +7 -0
  2. data/.gemspec +28 -0
  3. data/CHANGELOG.md +10 -0
  4. data/LICENSE +191 -0
  5. data/README.md +9 -0
  6. data/VERSION +1 -0
  7. data/bin/bel2_termcheck +39 -0
  8. data/lib/bel_parser.rb +17 -0
  9. data/lib/bel_parser/ast_filter.rb +27 -0
  10. data/lib/bel_parser/ast_generator.rb +86 -0
  11. data/lib/bel_parser/ast_validator.rb +40 -0
  12. data/lib/bel_parser/expression/parser.rb +42 -0
  13. data/lib/bel_parser/expression/term_semantics.rb +36 -0
  14. data/lib/bel_parser/language.rb +7 -0
  15. data/lib/bel_parser/language/function.rb +59 -0
  16. data/lib/bel_parser/language/quoting.rb +236 -0
  17. data/lib/bel_parser/language/semantic_ast.rb +604 -0
  18. data/lib/bel_parser/language/semantics/analyzer.rb +59 -0
  19. data/lib/bel_parser/language/signature.rb +39 -0
  20. data/lib/bel_parser/language/specification.rb +49 -0
  21. data/lib/bel_parser/language/syntax/expression/incomplete_node.rb +14 -0
  22. data/lib/bel_parser/language/syntax/expression/invalid_term_function.rb +22 -0
  23. data/lib/bel_parser/language/version1.rb +50 -0
  24. data/lib/bel_parser/language/version1/functions/abundance.rb +85 -0
  25. data/lib/bel_parser/language/version1/functions/biological_process.rb +85 -0
  26. data/lib/bel_parser/language/version1/functions/catalytic_activity.rb +110 -0
  27. data/lib/bel_parser/language/version1/functions/cell_secretion.rb +80 -0
  28. data/lib/bel_parser/language/version1/functions/cell_surface_expression.rb +80 -0
  29. data/lib/bel_parser/language/version1/functions/chaperone_activity.rb +110 -0
  30. data/lib/bel_parser/language/version1/functions/complex_abundance.rb +115 -0
  31. data/lib/bel_parser/language/version1/functions/composite_abundance.rb +80 -0
  32. data/lib/bel_parser/language/version1/functions/degradation.rb +80 -0
  33. data/lib/bel_parser/language/version1/functions/fusion.rb +302 -0
  34. data/lib/bel_parser/language/version1/functions/gene_abundance.rb +125 -0
  35. data/lib/bel_parser/language/version1/functions/gtp_bound_activity.rb +110 -0
  36. data/lib/bel_parser/language/version1/functions/kinase_activity.rb +110 -0
  37. data/lib/bel_parser/language/version1/functions/list.rb +115 -0
  38. data/lib/bel_parser/language/version1/functions/micro_rna_abundance.rb +85 -0
  39. data/lib/bel_parser/language/version1/functions/molecular_activity.rb +80 -0
  40. data/lib/bel_parser/language/version1/functions/pathology.rb +85 -0
  41. data/lib/bel_parser/language/version1/functions/peptidase_activity.rb +110 -0
  42. data/lib/bel_parser/language/version1/functions/phosphatase_activity.rb +110 -0
  43. data/lib/bel_parser/language/version1/functions/products.rb +80 -0
  44. data/lib/bel_parser/language/version1/functions/protein_abundance.rb +245 -0
  45. data/lib/bel_parser/language/version1/functions/protein_modification.rb +167 -0
  46. data/lib/bel_parser/language/version1/functions/reactants.rb +80 -0
  47. data/lib/bel_parser/language/version1/functions/reaction.rb +85 -0
  48. data/lib/bel_parser/language/version1/functions/ribosylation_activity.rb +110 -0
  49. data/lib/bel_parser/language/version1/functions/rna_abundance.rb +125 -0
  50. data/lib/bel_parser/language/version1/functions/substitution.rb +96 -0
  51. data/lib/bel_parser/language/version1/functions/transcriptional_activity.rb +110 -0
  52. data/lib/bel_parser/language/version1/functions/translocation.rb +100 -0
  53. data/lib/bel_parser/language/version1/functions/transport_activity.rb +110 -0
  54. data/lib/bel_parser/language/version1/functions/truncation.rb +82 -0
  55. data/lib/bel_parser/language/version1/return_types/abundance.rb +20 -0
  56. data/lib/bel_parser/language/version1/return_types/any.rb +74 -0
  57. data/lib/bel_parser/language/version1/return_types/biological_process.rb +17 -0
  58. data/lib/bel_parser/language/version1/return_types/catalytic_activity.rb +20 -0
  59. data/lib/bel_parser/language/version1/return_types/chaperone_activity.rb +20 -0
  60. data/lib/bel_parser/language/version1/return_types/complex_abundance.rb +17 -0
  61. data/lib/bel_parser/language/version1/return_types/fusion.rb +17 -0
  62. data/lib/bel_parser/language/version1/return_types/gene_abundance.rb +17 -0
  63. data/lib/bel_parser/language/version1/return_types/gtp_bound_activity.rb +20 -0
  64. data/lib/bel_parser/language/version1/return_types/kinase_activity.rb +20 -0
  65. data/lib/bel_parser/language/version1/return_types/list.rb +17 -0
  66. data/lib/bel_parser/language/version1/return_types/micro_rna_abundance.rb +17 -0
  67. data/lib/bel_parser/language/version1/return_types/molecular_activity.rb +20 -0
  68. data/lib/bel_parser/language/version1/return_types/pathology.rb +17 -0
  69. data/lib/bel_parser/language/version1/return_types/peptidase_activity.rb +20 -0
  70. data/lib/bel_parser/language/version1/return_types/phosphatase_activity.rb +20 -0
  71. data/lib/bel_parser/language/version1/return_types/products.rb +17 -0
  72. data/lib/bel_parser/language/version1/return_types/protein_abundance.rb +17 -0
  73. data/lib/bel_parser/language/version1/return_types/protein_modification.rb +17 -0
  74. data/lib/bel_parser/language/version1/return_types/reactants.rb +17 -0
  75. data/lib/bel_parser/language/version1/return_types/ribosylation_activity.rb +20 -0
  76. data/lib/bel_parser/language/version1/return_types/rna_abundance.rb +17 -0
  77. data/lib/bel_parser/language/version1/return_types/substitution.rb +17 -0
  78. data/lib/bel_parser/language/version1/return_types/transcriptional_activity.rb +20 -0
  79. data/lib/bel_parser/language/version1/return_types/transport_activity.rb +20 -0
  80. data/lib/bel_parser/language/version1/return_types/truncation.rb +17 -0
  81. data/lib/bel_parser/language/version2.rb +50 -0
  82. data/lib/bel_parser/language/version2/functions/abundance.rb +165 -0
  83. data/lib/bel_parser/language/version2/functions/activity.rb +115 -0
  84. data/lib/bel_parser/language/version2/functions/biological_process.rb +85 -0
  85. data/lib/bel_parser/language/version2/functions/cell_secretion.rb +80 -0
  86. data/lib/bel_parser/language/version2/functions/cell_surface_expression.rb +80 -0
  87. data/lib/bel_parser/language/version2/functions/complex_abundance.rb +190 -0
  88. data/lib/bel_parser/language/version2/functions/composite_abundance.rb +80 -0
  89. data/lib/bel_parser/language/version2/functions/degradation.rb +80 -0
  90. data/lib/bel_parser/language/version2/functions/fragment.rb +119 -0
  91. data/lib/bel_parser/language/version2/functions/from_location.rb +85 -0
  92. data/lib/bel_parser/language/version2/functions/fusion.rb +227 -0
  93. data/lib/bel_parser/language/version2/functions/gene_abundance.rb +195 -0
  94. data/lib/bel_parser/language/version2/functions/list.rb +115 -0
  95. data/lib/bel_parser/language/version2/functions/location.rb +85 -0
  96. data/lib/bel_parser/language/version2/functions/micro_rna_abundance.rb +165 -0
  97. data/lib/bel_parser/language/version2/functions/molecular_activity.rb +83 -0
  98. data/lib/bel_parser/language/version2/functions/pathology.rb +85 -0
  99. data/lib/bel_parser/language/version2/functions/products.rb +80 -0
  100. data/lib/bel_parser/language/version2/functions/protein_abundance.rb +285 -0
  101. data/lib/bel_parser/language/version2/functions/protein_modification.rb +167 -0
  102. data/lib/bel_parser/language/version2/functions/reactants.rb +80 -0
  103. data/lib/bel_parser/language/version2/functions/reaction.rb +85 -0
  104. data/lib/bel_parser/language/version2/functions/rna_abundance.rb +195 -0
  105. data/lib/bel_parser/language/version2/functions/to_location.rb +85 -0
  106. data/lib/bel_parser/language/version2/functions/translocation.rb +90 -0
  107. data/lib/bel_parser/language/version2/functions/variant.rb +83 -0
  108. data/lib/bel_parser/language/version2/return_types/abundance.rb +20 -0
  109. data/lib/bel_parser/language/version2/return_types/activity.rb +20 -0
  110. data/lib/bel_parser/language/version2/return_types/any.rb +74 -0
  111. data/lib/bel_parser/language/version2/return_types/biological_process.rb +17 -0
  112. data/lib/bel_parser/language/version2/return_types/complex_abundance.rb +17 -0
  113. data/lib/bel_parser/language/version2/return_types/fragment.rb +20 -0
  114. data/lib/bel_parser/language/version2/return_types/from_location.rb +20 -0
  115. data/lib/bel_parser/language/version2/return_types/fusion.rb +17 -0
  116. data/lib/bel_parser/language/version2/return_types/gene_abundance.rb +17 -0
  117. data/lib/bel_parser/language/version2/return_types/list.rb +17 -0
  118. data/lib/bel_parser/language/version2/return_types/location.rb +20 -0
  119. data/lib/bel_parser/language/version2/return_types/micro_rna_abundance.rb +17 -0
  120. data/lib/bel_parser/language/version2/return_types/molecular_activity.rb +20 -0
  121. data/lib/bel_parser/language/version2/return_types/pathology.rb +17 -0
  122. data/lib/bel_parser/language/version2/return_types/products.rb +17 -0
  123. data/lib/bel_parser/language/version2/return_types/protein_abundance.rb +17 -0
  124. data/lib/bel_parser/language/version2/return_types/protein_modification.rb +17 -0
  125. data/lib/bel_parser/language/version2/return_types/reactants.rb +17 -0
  126. data/lib/bel_parser/language/version2/return_types/rna_abundance.rb +17 -0
  127. data/lib/bel_parser/language/version2/return_types/to_location.rb +20 -0
  128. data/lib/bel_parser/language/version2/return_types/variant.rb +20 -0
  129. data/lib/bel_parser/mixin/line_continuator.rb +15 -0
  130. data/lib/bel_parser/mixin/line_mapping.rb +14 -0
  131. data/lib/bel_parser/parser.rb +54 -0
  132. data/lib/bel_parser/parsers/ast/mapped_traversal.rb +36 -0
  133. data/lib/bel_parser/parsers/ast/node.rb +705 -0
  134. data/lib/bel_parser/parsers/ast/sexp.rb +8 -0
  135. data/lib/bel_parser/parsers/ast/traversal.rb +21 -0
  136. data/lib/bel_parser/parsers/bel_script.rb +4 -0
  137. data/lib/bel_parser/parsers/bel_script/define_annotation.rb +5476 -0
  138. data/lib/bel_parser/parsers/bel_script/define_annotation.rl +141 -0
  139. data/lib/bel_parser/parsers/bel_script/define_namespace.rb +1780 -0
  140. data/lib/bel_parser/parsers/bel_script/define_namespace.rl +121 -0
  141. data/lib/bel_parser/parsers/bel_script/set.rb +4556 -0
  142. data/lib/bel_parser/parsers/bel_script/set.rl +116 -0
  143. data/lib/bel_parser/parsers/bel_script/unset.rb +706 -0
  144. data/lib/bel_parser/parsers/bel_script/unset.rl +95 -0
  145. data/lib/bel_parser/parsers/common.rb +5 -0
  146. data/lib/bel_parser/parsers/common/blank_line.rb +211 -0
  147. data/lib/bel_parser/parsers/common/blank_line.rl +81 -0
  148. data/lib/bel_parser/parsers/common/comment_line.rb +245 -0
  149. data/lib/bel_parser/parsers/common/comment_line.rl +97 -0
  150. data/lib/bel_parser/parsers/common/common.rb +7 -0
  151. data/lib/bel_parser/parsers/common/common.rl +13 -0
  152. data/lib/bel_parser/parsers/common/identifier.rb +289 -0
  153. data/lib/bel_parser/parsers/common/identifier.rl +106 -0
  154. data/lib/bel_parser/parsers/common/list.rb +2142 -0
  155. data/lib/bel_parser/parsers/common/list.rl +144 -0
  156. data/lib/bel_parser/parsers/common/string.rb +271 -0
  157. data/lib/bel_parser/parsers/common/string.rl +107 -0
  158. data/lib/bel_parser/parsers/expression.rb +7 -0
  159. data/lib/bel_parser/parsers/expression/comment.rb +239 -0
  160. data/lib/bel_parser/parsers/expression/comment.rl +97 -0
  161. data/lib/bel_parser/parsers/expression/parameter.rb +1506 -0
  162. data/lib/bel_parser/parsers/expression/parameter.rl +97 -0
  163. data/lib/bel_parser/parsers/expression/relationship.rb +254 -0
  164. data/lib/bel_parser/parsers/expression/relationship.rl +98 -0
  165. data/lib/bel_parser/parsers/expression/statement_nested.rb +17802 -0
  166. data/lib/bel_parser/parsers/expression/statement_nested.rl +141 -0
  167. data/lib/bel_parser/parsers/expression/statement_observed_term.rb +7291 -0
  168. data/lib/bel_parser/parsers/expression/statement_observed_term.rl +92 -0
  169. data/lib/bel_parser/parsers/expression/statement_simple.rb +10475 -0
  170. data/lib/bel_parser/parsers/expression/statement_simple.rl +112 -0
  171. data/lib/bel_parser/parsers/expression/term.rb +3989 -0
  172. data/lib/bel_parser/parsers/expression/term.rl +157 -0
  173. data/lib/bel_parser/parsers/line_parser.rb +92 -0
  174. data/lib/bel_parser/parsers/mixin/buffer.rb +10 -0
  175. data/lib/bel_parser/parsers/nonblocking_io_wrapper.rb +50 -0
  176. data/lib/bel_parser/script/parser.rb +49 -0
  177. data/lib/bel_parser/vendor/ast.rb +17 -0
  178. data/lib/bel_parser/vendor/ast/node.rb +254 -0
  179. data/lib/bel_parser/vendor/ast/processor.rb +12 -0
  180. data/lib/bel_parser/vendor/ast/processor/mixin.rb +282 -0
  181. data/lib/bel_parser/vendor/ast/sexp.rb +30 -0
  182. metadata +226 -0
@@ -0,0 +1,116 @@
1
+ # begin: ragel
2
+ =begin
3
+ %%{
4
+ machine bel;
5
+
6
+ include 'common.rl';
7
+ include 'identifier.rl';
8
+ include 'string.rl';
9
+ include 'list.rl';
10
+
11
+ SET_KW = [sS][eE][tT];
12
+
13
+ action set_keyword {
14
+ @buffers[:set] = set()
15
+ }
16
+
17
+ action name {
18
+ @buffers[:set] = @buffers[:set] << name(@buffers[:ident])
19
+ }
20
+
21
+ action string_value {
22
+ @buffers[:set] = @buffers[:set] << value(@buffers[:string])
23
+ }
24
+
25
+ action ident_value {
26
+ @buffers[:set] = @buffers[:set] << value(@buffers[:ident])
27
+ }
28
+
29
+ action list_value {
30
+ @buffers[:set] = @buffers[:set] << value(@buffers[:list])
31
+ }
32
+
33
+ action yield_set {
34
+ yield @buffers[:set]
35
+ }
36
+
37
+ set :=
38
+ SET_KW %set_keyword
39
+ SP+
40
+ IDENT %name
41
+ SP+
42
+ EQL
43
+ SP+
44
+ (
45
+ STRING %string_value |
46
+ LIST %list_value |
47
+ IDENT %ident_value
48
+ ) NL @yield_set;
49
+ }%%
50
+ =end
51
+ # end: ragel
52
+
53
+ require_relative '../ast/node'
54
+ require_relative '../mixin/buffer'
55
+ require_relative '../nonblocking_io_wrapper'
56
+
57
+ module BELParser
58
+ module Parsers
59
+ module BELScript
60
+ module Set
61
+
62
+ class << self
63
+
64
+ MAX_LENGTH = 1024 * 128 # 128K
65
+
66
+ def parse(content)
67
+ return nil unless content
68
+
69
+ Parser.new(content).each do |obj|
70
+ yield obj
71
+ end
72
+ end
73
+ end
74
+
75
+ private
76
+
77
+ class Parser
78
+ include Enumerable
79
+ include BELParser::Parsers::Buffer
80
+ include BELParser::Parsers::AST::Sexp
81
+
82
+ def initialize(content)
83
+ @content = content
84
+ # begin: ragel
85
+ %% write data;
86
+ # end: ragel
87
+ end
88
+
89
+ def each
90
+ @buffers = {}
91
+ data = @content.unpack('C*')
92
+ p = 0
93
+ pe = data.length
94
+ eof = data.length
95
+
96
+ # begin: ragel
97
+ %% write init;
98
+ %% write exec;
99
+ # end: ragel
100
+ end
101
+ end
102
+ end
103
+ end
104
+ end
105
+ end
106
+
107
+ if __FILE__ == $0
108
+ $stdin.each_line do |line|
109
+ BELParser::Parsers::BELScript::Set.parse(line) { |obj|
110
+ puts obj.inspect
111
+ }
112
+ end
113
+ end
114
+
115
+ # vim: ft=ruby ts=2 sw=2:
116
+ # encoding: utf-8
@@ -0,0 +1,706 @@
1
+
2
+ # begin: ragel
3
+ =begin
4
+
5
+ class << self
6
+ attr_accessor :_bel_trans_keys
7
+ private :_bel_trans_keys, :_bel_trans_keys=
8
+ end
9
+ self._bel_trans_keys = [
10
+ 0, 0, 85, 117, 78, 110,
11
+ 83, 115, 69, 101, 84,
12
+ 116, 9, 32, 9, 122,
13
+ 10, 122, 48, 122, 10, 122,
14
+ 0, 0, 0, 0, 0
15
+ ]
16
+
17
+ class << self
18
+ attr_accessor :_bel_key_spans
19
+ private :_bel_key_spans, :_bel_key_spans=
20
+ end
21
+ self._bel_key_spans = [
22
+ 0, 33, 33, 33, 33, 33, 24, 114,
23
+ 113, 75, 113, 0, 0
24
+ ]
25
+
26
+ class << self
27
+ attr_accessor :_bel_index_offsets
28
+ private :_bel_index_offsets, :_bel_index_offsets=
29
+ end
30
+ self._bel_index_offsets = [
31
+ 0, 0, 34, 68, 102, 136, 170, 195,
32
+ 310, 424, 500, 614, 615
33
+ ]
34
+
35
+ class << self
36
+ attr_accessor :_bel_indicies
37
+ private :_bel_indicies, :_bel_indicies=
38
+ end
39
+ self._bel_indicies = [
40
+ 0, 1, 1, 1, 1, 1, 1, 1,
41
+ 1, 1, 1, 1, 1, 1, 1, 1,
42
+ 1, 1, 1, 1, 1, 1, 1, 1,
43
+ 1, 1, 1, 1, 1, 1, 1, 1,
44
+ 0, 1, 2, 1, 1, 1, 1, 1,
45
+ 1, 1, 1, 1, 1, 1, 1, 1,
46
+ 1, 1, 1, 1, 1, 1, 1, 1,
47
+ 1, 1, 1, 1, 1, 1, 1, 1,
48
+ 1, 1, 2, 1, 3, 1, 1, 1,
49
+ 1, 1, 1, 1, 1, 1, 1, 1,
50
+ 1, 1, 1, 1, 1, 1, 1, 1,
51
+ 1, 1, 1, 1, 1, 1, 1, 1,
52
+ 1, 1, 1, 1, 3, 1, 4, 1,
53
+ 1, 1, 1, 1, 1, 1, 1, 1,
54
+ 1, 1, 1, 1, 1, 1, 1, 1,
55
+ 1, 1, 1, 1, 1, 1, 1, 1,
56
+ 1, 1, 1, 1, 1, 1, 4, 1,
57
+ 5, 1, 1, 1, 1, 1, 1, 1,
58
+ 1, 1, 1, 1, 1, 1, 1, 1,
59
+ 1, 1, 1, 1, 1, 1, 1, 1,
60
+ 1, 1, 1, 1, 1, 1, 1, 1,
61
+ 5, 1, 6, 1, 1, 1, 1, 1,
62
+ 1, 1, 1, 1, 1, 1, 1, 1,
63
+ 1, 1, 1, 1, 1, 1, 1, 1,
64
+ 1, 6, 1, 8, 7, 7, 7, 7,
65
+ 7, 7, 7, 7, 7, 7, 7, 7,
66
+ 7, 7, 7, 7, 7, 7, 7, 7,
67
+ 7, 7, 8, 7, 7, 7, 7, 7,
68
+ 7, 7, 7, 7, 7, 7, 7, 7,
69
+ 7, 7, 9, 9, 9, 9, 9, 9,
70
+ 9, 9, 9, 9, 7, 7, 7, 7,
71
+ 7, 7, 7, 9, 9, 9, 9, 9,
72
+ 9, 9, 9, 9, 9, 9, 9, 9,
73
+ 9, 9, 9, 9, 9, 9, 9, 9,
74
+ 9, 9, 9, 9, 9, 7, 7, 7,
75
+ 7, 9, 7, 9, 9, 9, 9, 9,
76
+ 9, 9, 9, 9, 9, 9, 9, 9,
77
+ 9, 9, 9, 9, 9, 9, 9, 9,
78
+ 9, 9, 9, 9, 9, 7, 10, 7,
79
+ 7, 7, 7, 7, 7, 7, 7, 7,
80
+ 7, 7, 7, 7, 7, 7, 7, 7,
81
+ 7, 7, 7, 7, 7, 7, 7, 7,
82
+ 7, 7, 7, 7, 7, 7, 7, 7,
83
+ 7, 7, 7, 7, 11, 11, 11, 11,
84
+ 11, 11, 11, 11, 11, 11, 7, 7,
85
+ 7, 7, 7, 7, 7, 11, 11, 11,
86
+ 11, 11, 11, 11, 11, 11, 11, 11,
87
+ 11, 11, 11, 11, 11, 11, 11, 11,
88
+ 11, 11, 11, 11, 11, 11, 11, 7,
89
+ 7, 7, 7, 11, 7, 11, 11, 11,
90
+ 11, 11, 11, 11, 11, 11, 11, 11,
91
+ 11, 11, 11, 11, 11, 11, 11, 11,
92
+ 11, 11, 11, 11, 11, 11, 11, 7,
93
+ 13, 13, 13, 13, 13, 13, 13, 13,
94
+ 13, 13, 12, 12, 12, 12, 12, 12,
95
+ 12, 13, 13, 13, 13, 13, 13, 13,
96
+ 13, 13, 13, 13, 13, 13, 13, 13,
97
+ 13, 13, 13, 13, 13, 13, 13, 13,
98
+ 13, 13, 13, 12, 12, 12, 12, 13,
99
+ 12, 13, 13, 13, 13, 13, 13, 13,
100
+ 13, 13, 13, 13, 13, 13, 13, 13,
101
+ 13, 13, 13, 13, 13, 13, 13, 13,
102
+ 13, 13, 13, 12, 14, 12, 12, 12,
103
+ 12, 12, 12, 12, 12, 12, 12, 12,
104
+ 12, 12, 12, 12, 12, 12, 12, 12,
105
+ 12, 12, 12, 12, 12, 12, 12, 12,
106
+ 12, 12, 12, 12, 12, 12, 12, 12,
107
+ 12, 12, 15, 15, 15, 15, 15, 15,
108
+ 15, 15, 15, 15, 12, 12, 12, 12,
109
+ 12, 12, 12, 15, 15, 15, 15, 15,
110
+ 15, 15, 15, 15, 15, 15, 15, 15,
111
+ 15, 15, 15, 15, 15, 15, 15, 15,
112
+ 15, 15, 15, 15, 15, 12, 12, 12,
113
+ 12, 15, 12, 15, 15, 15, 15, 15,
114
+ 15, 15, 15, 15, 15, 15, 15, 15,
115
+ 15, 15, 15, 15, 15, 15, 15, 15,
116
+ 15, 15, 15, 15, 15, 12, 1, 1,
117
+ 0
118
+ ]
119
+
120
+ class << self
121
+ attr_accessor :_bel_trans_targs
122
+ private :_bel_trans_targs, :_bel_trans_targs=
123
+ end
124
+ self._bel_trans_targs = [
125
+ 2, 0, 3, 4, 5, 6, 7, 0,
126
+ 7, 8, 11, 8, 0, 10, 12, 10
127
+ ]
128
+
129
+ class << self
130
+ attr_accessor :_bel_trans_actions
131
+ private :_bel_trans_actions, :_bel_trans_actions=
132
+ end
133
+ self._bel_trans_actions = [
134
+ 0, 0, 0, 0, 0, 0, 1, 2,
135
+ 0, 3, 4, 5, 6, 3, 7, 5
136
+ ]
137
+
138
+ class << self
139
+ attr_accessor :_bel_eof_actions
140
+ private :_bel_eof_actions, :_bel_eof_actions=
141
+ end
142
+ self._bel_eof_actions = [
143
+ 0, 0, 0, 0, 0, 0, 0, 2,
144
+ 2, 6, 6, 0, 0
145
+ ]
146
+
147
+ class << self
148
+ attr_accessor :bel_start
149
+ end
150
+ self.bel_start = 1;
151
+ class << self
152
+ attr_accessor :bel_first_final
153
+ end
154
+ self.bel_first_final = 11;
155
+ class << self
156
+ attr_accessor :bel_error
157
+ end
158
+ self.bel_error = 0;
159
+
160
+ class << self
161
+ attr_accessor :bel_en_ident
162
+ end
163
+ self.bel_en_ident = 9;
164
+ class << self
165
+ attr_accessor :bel_en_unset
166
+ end
167
+ self.bel_en_unset = 1;
168
+
169
+
170
+ begin
171
+ p ||= 0
172
+ pe ||= data.length
173
+ cs = bel_start
174
+ end
175
+
176
+ begin
177
+ testEof = false
178
+ _slen, _trans, _keys, _inds, _acts, _nacts = nil
179
+ _goto_level = 0
180
+ _resume = 10
181
+ _eof_trans = 15
182
+ _again = 20
183
+ _test_eof = 30
184
+ _out = 40
185
+ while true
186
+ if _goto_level <= 0
187
+ if p == pe
188
+ _goto_level = _test_eof
189
+ next
190
+ end
191
+ if cs == 0
192
+ _goto_level = _out
193
+ next
194
+ end
195
+ end
196
+ if _goto_level <= _resume
197
+ _keys = cs << 1
198
+ _inds = _bel_index_offsets[cs]
199
+ _slen = _bel_key_spans[cs]
200
+ _wide = data[p].ord
201
+ _trans = if ( _slen > 0 &&
202
+ _bel_trans_keys[_keys] <= _wide &&
203
+ _wide <= _bel_trans_keys[_keys + 1]
204
+ ) then
205
+ _bel_indicies[ _inds + _wide - _bel_trans_keys[_keys] ]
206
+ else
207
+ _bel_indicies[ _inds + _slen ]
208
+ end
209
+ cs = _bel_trans_targs[_trans]
210
+ if _bel_trans_actions[_trans] != 0
211
+ case _bel_trans_actions[_trans]
212
+ when 5 then
213
+ begin
214
+
215
+ (@buffers[:ident] ||= []) << data[p].ord
216
+ end
217
+ when 2 then
218
+ begin
219
+
220
+ unless @buffers[:ident].is_a?(::AST::Node)
221
+ @buffers[:ident] ||= []
222
+ @buffers[:ident] = identifier(utf8_string(@buffers[:ident]).sub(/\n$/, ''))
223
+ end
224
+ end
225
+ when 1 then
226
+ begin
227
+
228
+ @buffers[:unset] = unset()
229
+ end
230
+ when 3 then
231
+ begin
232
+
233
+ @buffers[:ident] = []
234
+ end
235
+ begin
236
+
237
+ (@buffers[:ident] ||= []) << data[p].ord
238
+ end
239
+ when 7 then
240
+ begin
241
+
242
+ @buffers[:ident] = identifier(utf8_string(@buffers[:ident]))
243
+ end
244
+ begin
245
+
246
+ yield @buffers[:ident]
247
+ end
248
+ when 6 then
249
+ begin
250
+
251
+ unless @buffers[:ident].is_a?(::AST::Node)
252
+ @buffers[:ident] ||= []
253
+ @buffers[:ident] = identifier(utf8_string(@buffers[:ident]).sub(/\n$/, ''))
254
+ end
255
+ end
256
+ begin
257
+
258
+ @buffers[:ident] ||= []
259
+ yield @buffers[:ident]
260
+ end
261
+ when 4 then
262
+ begin
263
+
264
+ @buffers[:ident] = identifier(utf8_string(@buffers[:ident]))
265
+ end
266
+ begin
267
+
268
+ @buffers[:unset] = @buffers[:unset] << name(@buffers[:ident])
269
+ end
270
+ begin
271
+
272
+ yield @buffers[:unset]
273
+ end
274
+ end
275
+ end
276
+ end
277
+ if _goto_level <= _again
278
+ if cs == 0
279
+ _goto_level = _out
280
+ next
281
+ end
282
+ p += 1
283
+ if p != pe
284
+ _goto_level = _resume
285
+ next
286
+ end
287
+ end
288
+ if _goto_level <= _test_eof
289
+ if p == eof
290
+ case _bel_eof_actions[cs]
291
+ when 2 then
292
+ begin
293
+
294
+ unless @buffers[:ident].is_a?(::AST::Node)
295
+ @buffers[:ident] ||= []
296
+ @buffers[:ident] = identifier(utf8_string(@buffers[:ident]).sub(/\n$/, ''))
297
+ end
298
+ end
299
+ when 6 then
300
+ begin
301
+
302
+ unless @buffers[:ident].is_a?(::AST::Node)
303
+ @buffers[:ident] ||= []
304
+ @buffers[:ident] = identifier(utf8_string(@buffers[:ident]).sub(/\n$/, ''))
305
+ end
306
+ end
307
+ begin
308
+
309
+ @buffers[:ident] ||= []
310
+ yield @buffers[:ident]
311
+ end
312
+ end
313
+ end
314
+
315
+ end
316
+ if _goto_level <= _out
317
+ break
318
+ end
319
+ end
320
+ end
321
+
322
+
323
+ =end
324
+ # end: ragel
325
+
326
+ require_relative '../ast/node'
327
+ require_relative '../mixin/buffer'
328
+ require_relative '../nonblocking_io_wrapper'
329
+
330
+ module BELParser
331
+ module Parsers
332
+ module BELScript
333
+ module Unset
334
+
335
+ class << self
336
+
337
+ MAX_LENGTH = 1024 * 128 # 128K
338
+
339
+ def parse(content)
340
+ return nil unless content
341
+
342
+ Parser.new(content).each do |obj|
343
+ yield obj
344
+ end
345
+ end
346
+ end
347
+
348
+ private
349
+
350
+ class Parser
351
+ include Enumerable
352
+ include BELParser::Parsers::Buffer
353
+ include BELParser::Parsers::AST::Sexp
354
+
355
+ def initialize(content)
356
+ @content = content
357
+ # begin: ragel
358
+
359
+ class << self
360
+ attr_accessor :_bel_trans_keys
361
+ private :_bel_trans_keys, :_bel_trans_keys=
362
+ end
363
+ self._bel_trans_keys = [
364
+ 0, 0, 85, 117, 78, 110,
365
+ 83, 115, 69, 101, 84,
366
+ 116, 9, 32, 9, 122,
367
+ 10, 122, 48, 122, 10, 122,
368
+ 0, 0, 0, 0, 0
369
+ ]
370
+
371
+ class << self
372
+ attr_accessor :_bel_key_spans
373
+ private :_bel_key_spans, :_bel_key_spans=
374
+ end
375
+ self._bel_key_spans = [
376
+ 0, 33, 33, 33, 33, 33, 24, 114,
377
+ 113, 75, 113, 0, 0
378
+ ]
379
+
380
+ class << self
381
+ attr_accessor :_bel_index_offsets
382
+ private :_bel_index_offsets, :_bel_index_offsets=
383
+ end
384
+ self._bel_index_offsets = [
385
+ 0, 0, 34, 68, 102, 136, 170, 195,
386
+ 310, 424, 500, 614, 615
387
+ ]
388
+
389
+ class << self
390
+ attr_accessor :_bel_indicies
391
+ private :_bel_indicies, :_bel_indicies=
392
+ end
393
+ self._bel_indicies = [
394
+ 0, 1, 1, 1, 1, 1, 1, 1,
395
+ 1, 1, 1, 1, 1, 1, 1, 1,
396
+ 1, 1, 1, 1, 1, 1, 1, 1,
397
+ 1, 1, 1, 1, 1, 1, 1, 1,
398
+ 0, 1, 2, 1, 1, 1, 1, 1,
399
+ 1, 1, 1, 1, 1, 1, 1, 1,
400
+ 1, 1, 1, 1, 1, 1, 1, 1,
401
+ 1, 1, 1, 1, 1, 1, 1, 1,
402
+ 1, 1, 2, 1, 3, 1, 1, 1,
403
+ 1, 1, 1, 1, 1, 1, 1, 1,
404
+ 1, 1, 1, 1, 1, 1, 1, 1,
405
+ 1, 1, 1, 1, 1, 1, 1, 1,
406
+ 1, 1, 1, 1, 3, 1, 4, 1,
407
+ 1, 1, 1, 1, 1, 1, 1, 1,
408
+ 1, 1, 1, 1, 1, 1, 1, 1,
409
+ 1, 1, 1, 1, 1, 1, 1, 1,
410
+ 1, 1, 1, 1, 1, 1, 4, 1,
411
+ 5, 1, 1, 1, 1, 1, 1, 1,
412
+ 1, 1, 1, 1, 1, 1, 1, 1,
413
+ 1, 1, 1, 1, 1, 1, 1, 1,
414
+ 1, 1, 1, 1, 1, 1, 1, 1,
415
+ 5, 1, 6, 1, 1, 1, 1, 1,
416
+ 1, 1, 1, 1, 1, 1, 1, 1,
417
+ 1, 1, 1, 1, 1, 1, 1, 1,
418
+ 1, 6, 1, 8, 7, 7, 7, 7,
419
+ 7, 7, 7, 7, 7, 7, 7, 7,
420
+ 7, 7, 7, 7, 7, 7, 7, 7,
421
+ 7, 7, 8, 7, 7, 7, 7, 7,
422
+ 7, 7, 7, 7, 7, 7, 7, 7,
423
+ 7, 7, 9, 9, 9, 9, 9, 9,
424
+ 9, 9, 9, 9, 7, 7, 7, 7,
425
+ 7, 7, 7, 9, 9, 9, 9, 9,
426
+ 9, 9, 9, 9, 9, 9, 9, 9,
427
+ 9, 9, 9, 9, 9, 9, 9, 9,
428
+ 9, 9, 9, 9, 9, 7, 7, 7,
429
+ 7, 9, 7, 9, 9, 9, 9, 9,
430
+ 9, 9, 9, 9, 9, 9, 9, 9,
431
+ 9, 9, 9, 9, 9, 9, 9, 9,
432
+ 9, 9, 9, 9, 9, 7, 10, 7,
433
+ 7, 7, 7, 7, 7, 7, 7, 7,
434
+ 7, 7, 7, 7, 7, 7, 7, 7,
435
+ 7, 7, 7, 7, 7, 7, 7, 7,
436
+ 7, 7, 7, 7, 7, 7, 7, 7,
437
+ 7, 7, 7, 7, 11, 11, 11, 11,
438
+ 11, 11, 11, 11, 11, 11, 7, 7,
439
+ 7, 7, 7, 7, 7, 11, 11, 11,
440
+ 11, 11, 11, 11, 11, 11, 11, 11,
441
+ 11, 11, 11, 11, 11, 11, 11, 11,
442
+ 11, 11, 11, 11, 11, 11, 11, 7,
443
+ 7, 7, 7, 11, 7, 11, 11, 11,
444
+ 11, 11, 11, 11, 11, 11, 11, 11,
445
+ 11, 11, 11, 11, 11, 11, 11, 11,
446
+ 11, 11, 11, 11, 11, 11, 11, 7,
447
+ 13, 13, 13, 13, 13, 13, 13, 13,
448
+ 13, 13, 12, 12, 12, 12, 12, 12,
449
+ 12, 13, 13, 13, 13, 13, 13, 13,
450
+ 13, 13, 13, 13, 13, 13, 13, 13,
451
+ 13, 13, 13, 13, 13, 13, 13, 13,
452
+ 13, 13, 13, 12, 12, 12, 12, 13,
453
+ 12, 13, 13, 13, 13, 13, 13, 13,
454
+ 13, 13, 13, 13, 13, 13, 13, 13,
455
+ 13, 13, 13, 13, 13, 13, 13, 13,
456
+ 13, 13, 13, 12, 14, 12, 12, 12,
457
+ 12, 12, 12, 12, 12, 12, 12, 12,
458
+ 12, 12, 12, 12, 12, 12, 12, 12,
459
+ 12, 12, 12, 12, 12, 12, 12, 12,
460
+ 12, 12, 12, 12, 12, 12, 12, 12,
461
+ 12, 12, 15, 15, 15, 15, 15, 15,
462
+ 15, 15, 15, 15, 12, 12, 12, 12,
463
+ 12, 12, 12, 15, 15, 15, 15, 15,
464
+ 15, 15, 15, 15, 15, 15, 15, 15,
465
+ 15, 15, 15, 15, 15, 15, 15, 15,
466
+ 15, 15, 15, 15, 15, 12, 12, 12,
467
+ 12, 15, 12, 15, 15, 15, 15, 15,
468
+ 15, 15, 15, 15, 15, 15, 15, 15,
469
+ 15, 15, 15, 15, 15, 15, 15, 15,
470
+ 15, 15, 15, 15, 15, 12, 1, 1,
471
+ 0
472
+ ]
473
+
474
+ class << self
475
+ attr_accessor :_bel_trans_targs
476
+ private :_bel_trans_targs, :_bel_trans_targs=
477
+ end
478
+ self._bel_trans_targs = [
479
+ 2, 0, 3, 4, 5, 6, 7, 0,
480
+ 7, 8, 11, 8, 0, 10, 12, 10
481
+ ]
482
+
483
+ class << self
484
+ attr_accessor :_bel_trans_actions
485
+ private :_bel_trans_actions, :_bel_trans_actions=
486
+ end
487
+ self._bel_trans_actions = [
488
+ 0, 0, 0, 0, 0, 0, 1, 2,
489
+ 0, 3, 4, 5, 6, 3, 7, 5
490
+ ]
491
+
492
+ class << self
493
+ attr_accessor :_bel_eof_actions
494
+ private :_bel_eof_actions, :_bel_eof_actions=
495
+ end
496
+ self._bel_eof_actions = [
497
+ 0, 0, 0, 0, 0, 0, 0, 2,
498
+ 2, 6, 6, 0, 0
499
+ ]
500
+
501
+ class << self
502
+ attr_accessor :bel_start
503
+ end
504
+ self.bel_start = 1;
505
+ class << self
506
+ attr_accessor :bel_first_final
507
+ end
508
+ self.bel_first_final = 11;
509
+ class << self
510
+ attr_accessor :bel_error
511
+ end
512
+ self.bel_error = 0;
513
+
514
+ class << self
515
+ attr_accessor :bel_en_ident
516
+ end
517
+ self.bel_en_ident = 9;
518
+ class << self
519
+ attr_accessor :bel_en_unset
520
+ end
521
+ self.bel_en_unset = 1;
522
+
523
+
524
+ # end: ragel
525
+ end
526
+
527
+ def each
528
+ @buffers = {}
529
+ data = @content.unpack('C*')
530
+ p = 0
531
+ pe = data.length
532
+ eof = data.length
533
+
534
+ # begin: ragel
535
+
536
+ begin
537
+ p ||= 0
538
+ pe ||= data.length
539
+ cs = bel_start
540
+ end
541
+
542
+
543
+ begin
544
+ testEof = false
545
+ _slen, _trans, _keys, _inds, _acts, _nacts = nil
546
+ _goto_level = 0
547
+ _resume = 10
548
+ _eof_trans = 15
549
+ _again = 20
550
+ _test_eof = 30
551
+ _out = 40
552
+ while true
553
+ if _goto_level <= 0
554
+ if p == pe
555
+ _goto_level = _test_eof
556
+ next
557
+ end
558
+ if cs == 0
559
+ _goto_level = _out
560
+ next
561
+ end
562
+ end
563
+ if _goto_level <= _resume
564
+ _keys = cs << 1
565
+ _inds = _bel_index_offsets[cs]
566
+ _slen = _bel_key_spans[cs]
567
+ _wide = data[p].ord
568
+ _trans = if ( _slen > 0 &&
569
+ _bel_trans_keys[_keys] <= _wide &&
570
+ _wide <= _bel_trans_keys[_keys + 1]
571
+ ) then
572
+ _bel_indicies[ _inds + _wide - _bel_trans_keys[_keys] ]
573
+ else
574
+ _bel_indicies[ _inds + _slen ]
575
+ end
576
+ cs = _bel_trans_targs[_trans]
577
+ if _bel_trans_actions[_trans] != 0
578
+ case _bel_trans_actions[_trans]
579
+ when 5 then
580
+ begin
581
+
582
+ (@buffers[:ident] ||= []) << data[p].ord
583
+ end
584
+ when 2 then
585
+ begin
586
+
587
+ unless @buffers[:ident].is_a?(::AST::Node)
588
+ @buffers[:ident] ||= []
589
+ @buffers[:ident] = identifier(utf8_string(@buffers[:ident]).sub(/\n$/, ''))
590
+ end
591
+ end
592
+ when 1 then
593
+ begin
594
+
595
+ @buffers[:unset] = unset()
596
+ end
597
+ when 3 then
598
+ begin
599
+
600
+ @buffers[:ident] = []
601
+ end
602
+ begin
603
+
604
+ (@buffers[:ident] ||= []) << data[p].ord
605
+ end
606
+ when 7 then
607
+ begin
608
+
609
+ @buffers[:ident] = identifier(utf8_string(@buffers[:ident]))
610
+ end
611
+ begin
612
+
613
+ yield @buffers[:ident]
614
+ end
615
+ when 6 then
616
+ begin
617
+
618
+ unless @buffers[:ident].is_a?(::AST::Node)
619
+ @buffers[:ident] ||= []
620
+ @buffers[:ident] = identifier(utf8_string(@buffers[:ident]).sub(/\n$/, ''))
621
+ end
622
+ end
623
+ begin
624
+
625
+ @buffers[:ident] ||= []
626
+ yield @buffers[:ident]
627
+ end
628
+ when 4 then
629
+ begin
630
+
631
+ @buffers[:ident] = identifier(utf8_string(@buffers[:ident]))
632
+ end
633
+ begin
634
+
635
+ @buffers[:unset] = @buffers[:unset] << name(@buffers[:ident])
636
+ end
637
+ begin
638
+
639
+ yield @buffers[:unset]
640
+ end
641
+ end
642
+ end
643
+ end
644
+ if _goto_level <= _again
645
+ if cs == 0
646
+ _goto_level = _out
647
+ next
648
+ end
649
+ p += 1
650
+ if p != pe
651
+ _goto_level = _resume
652
+ next
653
+ end
654
+ end
655
+ if _goto_level <= _test_eof
656
+ if p == eof
657
+ case _bel_eof_actions[cs]
658
+ when 2 then
659
+ begin
660
+
661
+ unless @buffers[:ident].is_a?(::AST::Node)
662
+ @buffers[:ident] ||= []
663
+ @buffers[:ident] = identifier(utf8_string(@buffers[:ident]).sub(/\n$/, ''))
664
+ end
665
+ end
666
+ when 6 then
667
+ begin
668
+
669
+ unless @buffers[:ident].is_a?(::AST::Node)
670
+ @buffers[:ident] ||= []
671
+ @buffers[:ident] = identifier(utf8_string(@buffers[:ident]).sub(/\n$/, ''))
672
+ end
673
+ end
674
+ begin
675
+
676
+ @buffers[:ident] ||= []
677
+ yield @buffers[:ident]
678
+ end
679
+ end
680
+ end
681
+
682
+ end
683
+ if _goto_level <= _out
684
+ break
685
+ end
686
+ end
687
+ end
688
+
689
+ # end: ragel
690
+ end
691
+ end
692
+ end
693
+ end
694
+ end
695
+ end
696
+
697
+ if __FILE__ == $0
698
+ $stdin.each_line do |line|
699
+ BELParser::Parsers::BELScript::Unset.parse(line) { |obj|
700
+ puts obj.inspect
701
+ }
702
+ end
703
+ end
704
+
705
+ # vim: ft=ruby ts=2 sw=2:
706
+ # encoding: utf-8