bel_parser 1.0.0.alpha.38-java → 1.0.0.alpha.39-java

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 (47) hide show
  1. checksums.yaml +4 -4
  2. data/VERSION +1 -1
  3. data/lib/bel_parser/ast_filter.rb +6 -2
  4. data/lib/bel_parser/parsers/ast/node.rb +113 -58
  5. data/lib/bel_parser/parsers/bel_script/define_annotation.rb +4175 -3097
  6. data/lib/bel_parser/parsers/bel_script/define_annotation.rl +142 -49
  7. data/lib/bel_parser/parsers/bel_script/define_namespace.rb +980 -461
  8. data/lib/bel_parser/parsers/bel_script/define_namespace.rl +79 -39
  9. data/lib/bel_parser/parsers/bel_script/set.rb +4878 -2743
  10. data/lib/bel_parser/parsers/bel_script/set.rl +114 -32
  11. data/lib/bel_parser/parsers/bel_script/set_document.rb +5839 -5292
  12. data/lib/bel_parser/parsers/bel_script/set_document.rl +130 -27
  13. data/lib/bel_parser/parsers/bel_script/unset.rb +321 -234
  14. data/lib/bel_parser/parsers/bel_script/unset.rl +49 -21
  15. data/lib/bel_parser/parsers/common/blank_line.rb +12 -11
  16. data/lib/bel_parser/parsers/common/blank_line.rl +12 -12
  17. data/lib/bel_parser/parsers/common/comment_line.rb +65 -40
  18. data/lib/bel_parser/parsers/common/comment_line.rl +26 -26
  19. data/lib/bel_parser/parsers/common/common.rl +60 -0
  20. data/lib/bel_parser/parsers/common/function.rb +319 -0
  21. data/lib/bel_parser/parsers/common/function.rl +149 -0
  22. data/lib/bel_parser/parsers/common/identifier.rb +72 -68
  23. data/lib/bel_parser/parsers/common/identifier.rl +73 -29
  24. data/lib/bel_parser/parsers/common/list.rb +1617 -1243
  25. data/lib/bel_parser/parsers/common/list.rl +120 -60
  26. data/lib/bel_parser/parsers/common/string.rb +114 -41
  27. data/lib/bel_parser/parsers/common/string.rl +91 -28
  28. data/lib/bel_parser/parsers/common.rb +1 -0
  29. data/lib/bel_parser/parsers/expression/comment.rb +70 -38
  30. data/lib/bel_parser/parsers/expression/comment.rl +37 -20
  31. data/lib/bel_parser/parsers/expression/nested_statement.rb +63116 -13958
  32. data/lib/bel_parser/parsers/expression/nested_statement.rl +53 -23
  33. data/lib/bel_parser/parsers/expression/observed_term.rb +32497 -5188
  34. data/lib/bel_parser/parsers/expression/observed_term.rl +25 -20
  35. data/lib/bel_parser/parsers/expression/parameter.rb +2861 -847
  36. data/lib/bel_parser/parsers/expression/parameter.rl +178 -21
  37. data/lib/bel_parser/parsers/expression/relationship.rb +73 -55
  38. data/lib/bel_parser/parsers/expression/relationship.rl +41 -23
  39. data/lib/bel_parser/parsers/expression/simple_statement.rb +42895 -7846
  40. data/lib/bel_parser/parsers/expression/simple_statement.rl +41 -24
  41. data/lib/bel_parser/parsers/expression/term.rb +16498 -2602
  42. data/lib/bel_parser/parsers/expression/term.rl +52 -35
  43. data/lib/bel_parser/parsers/line_parser.rb +1 -0
  44. data/lib/bel_parser/parsers/mixin/buffer.rb +4 -0
  45. data/lib/bel_parser/parsers/tracer.rb +19 -0
  46. data/lib/bel_parser/script/state/namespace_definition.rb +1 -0
  47. metadata +10 -7
@@ -0,0 +1,319 @@
1
+
2
+ # begin: ragel
3
+ =begin
4
+
5
+
6
+ =end
7
+ # end: ragel
8
+
9
+ require_relative '../ast/node'
10
+ require_relative '../mixin/buffer'
11
+ require_relative '../nonblocking_io_wrapper'
12
+ require_relative '../tracer'
13
+
14
+ module BELParser
15
+ module Parsers
16
+ module Common
17
+ module Function
18
+
19
+ class << self
20
+
21
+ MAX_LENGTH = 1024 * 128 # 128K
22
+
23
+ def parse(content)
24
+ return nil unless content
25
+
26
+ Parser.new(content).each do |obj|
27
+ yield obj
28
+ end
29
+ end
30
+ end
31
+
32
+ private
33
+
34
+ class Parser
35
+ include Enumerable
36
+ include BELParser::Parsers::Buffer
37
+ include BELParser::Parsers::AST::Sexp
38
+ include BELParser::Parsers::Tracer
39
+
40
+ def initialize(content)
41
+ @content = content
42
+ # begin: ragel
43
+
44
+ class << self
45
+ attr_accessor :_bel_trans_keys
46
+ private :_bel_trans_keys, :_bel_trans_keys=
47
+ end
48
+ self._bel_trans_keys = [
49
+ 0, 0, 33, 126, 10, 126,
50
+ 0, 0, 0
51
+ ]
52
+
53
+ class << self
54
+ attr_accessor :_bel_key_spans
55
+ private :_bel_key_spans, :_bel_key_spans=
56
+ end
57
+ self._bel_key_spans = [
58
+ 0, 94, 117, 0
59
+ ]
60
+
61
+ class << self
62
+ attr_accessor :_bel_index_offsets
63
+ private :_bel_index_offsets, :_bel_index_offsets=
64
+ end
65
+ self._bel_index_offsets = [
66
+ 0, 0, 95, 213
67
+ ]
68
+
69
+ class << self
70
+ attr_accessor :_bel_indicies
71
+ private :_bel_indicies, :_bel_indicies=
72
+ end
73
+ self._bel_indicies = [
74
+ 1, 0, 1, 1, 1, 1, 0, 0,
75
+ 1, 1, 1, 1, 1, 1, 1, 1,
76
+ 1, 1, 1, 1, 1, 1, 1, 1,
77
+ 1, 1, 1, 1, 1, 1, 1, 1,
78
+ 1, 1, 1, 1, 1, 1, 1, 1,
79
+ 1, 1, 1, 1, 1, 1, 1, 1,
80
+ 1, 1, 1, 1, 1, 1, 1, 1,
81
+ 1, 1, 1, 1, 1, 1, 1, 1,
82
+ 1, 1, 1, 1, 1, 1, 1, 1,
83
+ 1, 1, 1, 1, 1, 1, 1, 1,
84
+ 1, 1, 1, 1, 1, 1, 1, 1,
85
+ 1, 1, 1, 1, 1, 1, 0, 2,
86
+ 0, 0, 0, 0, 0, 0, 0, 0,
87
+ 0, 0, 0, 0, 0, 0, 0, 0,
88
+ 0, 0, 0, 0, 0, 0, 3, 0,
89
+ 3, 3, 3, 3, 0, 0, 3, 3,
90
+ 3, 3, 3, 3, 3, 3, 3, 3,
91
+ 3, 3, 3, 3, 3, 3, 3, 3,
92
+ 3, 3, 3, 3, 3, 3, 3, 3,
93
+ 3, 3, 3, 3, 3, 3, 3, 3,
94
+ 3, 3, 3, 3, 3, 3, 3, 3,
95
+ 3, 3, 3, 3, 3, 3, 3, 3,
96
+ 3, 3, 3, 3, 3, 3, 3, 3,
97
+ 3, 3, 3, 3, 3, 3, 3, 3,
98
+ 3, 3, 3, 3, 3, 3, 3, 3,
99
+ 3, 3, 3, 3, 3, 3, 3, 3,
100
+ 3, 3, 3, 3, 0, 4, 0
101
+ ]
102
+
103
+ class << self
104
+ attr_accessor :_bel_trans_targs
105
+ private :_bel_trans_targs, :_bel_trans_targs=
106
+ end
107
+ self._bel_trans_targs = [
108
+ 0, 2, 3, 2, 0
109
+ ]
110
+
111
+ class << self
112
+ attr_accessor :_bel_trans_actions
113
+ private :_bel_trans_actions, :_bel_trans_actions=
114
+ end
115
+ self._bel_trans_actions = [
116
+ 1, 2, 4, 0, 0
117
+ ]
118
+
119
+ class << self
120
+ attr_accessor :_bel_eof_actions
121
+ private :_bel_eof_actions, :_bel_eof_actions=
122
+ end
123
+ self._bel_eof_actions = [
124
+ 0, 1, 3, 5
125
+ ]
126
+
127
+ class << self
128
+ attr_accessor :bel_start
129
+ end
130
+ self.bel_start = 1;
131
+ class << self
132
+ attr_accessor :bel_first_final
133
+ end
134
+ self.bel_first_final = 2;
135
+ class << self
136
+ attr_accessor :bel_error
137
+ end
138
+ self.bel_error = 0;
139
+
140
+ class << self
141
+ attr_accessor :bel_en_function_node
142
+ end
143
+ self.bel_en_function_node = 1;
144
+
145
+
146
+ # end: ragel
147
+ end
148
+
149
+ def each
150
+ @buffers = {}
151
+ @incomplete = {}
152
+ data = @content.unpack('C*')
153
+ p = 0
154
+ p_start = 0
155
+ p_end = 0
156
+ pe = data.length
157
+ eof = data.length
158
+ @function_started = false
159
+
160
+ # begin: ragel
161
+
162
+ begin
163
+ p ||= 0
164
+ pe ||= data.length
165
+ cs = bel_start
166
+ end
167
+
168
+
169
+ begin
170
+ testEof = false
171
+ _slen, _trans, _keys, _inds, _acts, _nacts = nil
172
+ _goto_level = 0
173
+ _resume = 10
174
+ _eof_trans = 15
175
+ _again = 20
176
+ _test_eof = 30
177
+ _out = 40
178
+ while true
179
+ if _goto_level <= 0
180
+ if p == pe
181
+ _goto_level = _test_eof
182
+ next
183
+ end
184
+ if cs == 0
185
+ _goto_level = _out
186
+ next
187
+ end
188
+ end
189
+ if _goto_level <= _resume
190
+ _keys = cs << 1
191
+ _inds = _bel_index_offsets[cs]
192
+ _slen = _bel_key_spans[cs]
193
+ _wide = data[p].ord
194
+ _trans = if ( _slen > 0 &&
195
+ _bel_trans_keys[_keys] <= _wide &&
196
+ _wide <= _bel_trans_keys[_keys + 1]
197
+ ) then
198
+ _bel_indicies[ _inds + _wide - _bel_trans_keys[_keys] ]
199
+ else
200
+ _bel_indicies[ _inds + _slen ]
201
+ end
202
+ cs = _bel_trans_targs[_trans]
203
+ if _bel_trans_actions[_trans] != 0
204
+ case _bel_trans_actions[_trans]
205
+ when 2 then
206
+ begin
207
+
208
+ trace('FUNCTION start_function')
209
+ @function_started = true
210
+ p_start = p;
211
+ end
212
+ when 4 then
213
+ begin
214
+
215
+ trace('FUNCTION end_function')
216
+ p_end = p
217
+ chars = data[p_start...p_end]
218
+ completed = !chars.empty?
219
+ ident_node = identifier(utf8_string(chars), complete: completed)
220
+ fx_node = function(ident_node, complete: ident_node.complete)
221
+ @buffers[:function] = fx_node
222
+ end
223
+ when 1 then
224
+ begin
225
+
226
+ trace('FUNCTION function_node_err')
227
+ if @function_started
228
+ # hit invalid char, include it in the identifier that results
229
+ p_end = p + 1
230
+ chars = data[p_start...p_end]
231
+ completed = !chars.empty?
232
+ ident_node = identifier(utf8_string(chars), complete: completed)
233
+ fx_node = function(ident_node, complete: false)
234
+ @buffers[:function] = fx_node
235
+ yield @buffers[:function]
236
+ end
237
+ end
238
+ end
239
+ end
240
+ end
241
+ if _goto_level <= _again
242
+ if cs == 0
243
+ _goto_level = _out
244
+ next
245
+ end
246
+ p += 1
247
+ if p != pe
248
+ _goto_level = _resume
249
+ next
250
+ end
251
+ end
252
+ if _goto_level <= _test_eof
253
+ if p == eof
254
+ case _bel_eof_actions[cs]
255
+ when 1 then
256
+ begin
257
+
258
+ trace('FUNCTION function_node_err')
259
+ if @function_started
260
+ # hit invalid char, include it in the identifier that results
261
+ p_end = p + 1
262
+ chars = data[p_start...p_end]
263
+ completed = !chars.empty?
264
+ ident_node = identifier(utf8_string(chars), complete: completed)
265
+ fx_node = function(ident_node, complete: false)
266
+ @buffers[:function] = fx_node
267
+ yield @buffers[:function]
268
+ end
269
+ end
270
+ when 5 then
271
+ begin
272
+
273
+ trace('FUNCTION yield_function')
274
+ yield @buffers[:function]
275
+ end
276
+ when 3 then
277
+ begin
278
+
279
+ trace('FUNCTION end_function')
280
+ p_end = p
281
+ chars = data[p_start...p_end]
282
+ completed = !chars.empty?
283
+ ident_node = identifier(utf8_string(chars), complete: completed)
284
+ fx_node = function(ident_node, complete: ident_node.complete)
285
+ @buffers[:function] = fx_node
286
+ end
287
+ begin
288
+
289
+ trace('FUNCTION yield_function')
290
+ yield @buffers[:function]
291
+ end
292
+ end
293
+ end
294
+
295
+ end
296
+ if _goto_level <= _out
297
+ break
298
+ end
299
+ end
300
+ end
301
+
302
+ # end: ragel
303
+ end
304
+ end
305
+ end
306
+ end
307
+ end
308
+ end
309
+
310
+ if __FILE__ == $0
311
+ $stdin.each_line do |line|
312
+ BELParser::Parsers::Common::Function.parse(line) { |obj|
313
+ puts obj.inspect
314
+ }
315
+ end
316
+ end
317
+
318
+ # vim: ft=ruby ts=2 sw=2:
319
+ # encoding: utf-8
@@ -0,0 +1,149 @@
1
+ # begin: ragel
2
+ =begin
3
+ %%{
4
+ machine bel;
5
+
6
+ include 'common.rl';
7
+
8
+ action start_function {
9
+ trace('FUNCTION start_function')
10
+ @function_started = true
11
+ p_start = p;
12
+ }
13
+
14
+ action end_function {
15
+ trace('FUNCTION end_function')
16
+ p_end = p
17
+ chars = data[p_start...p_end]
18
+ completed = !chars.empty?
19
+ ident_node = identifier(utf8_string(chars), complete: completed)
20
+ fx_node = function(ident_node, complete: ident_node.complete)
21
+ @buffers[:function] = fx_node
22
+ }
23
+
24
+ action a_function_eof {
25
+ trace('FUNCTION a_function_eof')
26
+ if @function_started
27
+ p_end = p
28
+ chars = data[p_start...p_end]
29
+ completed = !chars.empty?
30
+ ident_node = identifier(utf8_string(chars), complete: completed)
31
+ fx_node = function(ident_node, complete: ident_node.complete)
32
+ @buffers[:function] = fx_node
33
+ end
34
+ }
35
+
36
+ action function_node_err {
37
+ trace('FUNCTION function_node_err')
38
+ if @function_started
39
+ # hit invalid char, include it in the identifier that results
40
+ p_end = p + 1
41
+ chars = data[p_start...p_end]
42
+ completed = !chars.empty?
43
+ ident_node = identifier(utf8_string(chars), complete: completed)
44
+ fx_node = function(ident_node, complete: false)
45
+ @buffers[:function] = fx_node
46
+ yield @buffers[:function]
47
+ end
48
+ }
49
+
50
+ action yield_function {
51
+ trace('FUNCTION yield_function')
52
+ yield @buffers[:function]
53
+ }
54
+
55
+ function =
56
+ FUNCTION
57
+ >start_function
58
+ %end_function
59
+ ;
60
+
61
+ maybe_function =
62
+ function?
63
+ ;
64
+
65
+ a_function =
66
+ function
67
+ $eof(a_function_eof)
68
+ ;
69
+
70
+ function_node :=
71
+ function
72
+ $err(function_node_err)
73
+ NL?
74
+ %yield_function
75
+ ;
76
+ }%%
77
+ =end
78
+ # end: ragel
79
+
80
+ require_relative '../ast/node'
81
+ require_relative '../mixin/buffer'
82
+ require_relative '../nonblocking_io_wrapper'
83
+ require_relative '../tracer'
84
+
85
+ module BELParser
86
+ module Parsers
87
+ module Common
88
+ module Function
89
+
90
+ class << self
91
+
92
+ MAX_LENGTH = 1024 * 128 # 128K
93
+
94
+ def parse(content)
95
+ return nil unless content
96
+
97
+ Parser.new(content).each do |obj|
98
+ yield obj
99
+ end
100
+ end
101
+ end
102
+
103
+ private
104
+
105
+ class Parser
106
+ include Enumerable
107
+ include BELParser::Parsers::Buffer
108
+ include BELParser::Parsers::AST::Sexp
109
+ include BELParser::Parsers::Tracer
110
+
111
+ def initialize(content)
112
+ @content = content
113
+ # begin: ragel
114
+ %% write data;
115
+ # end: ragel
116
+ end
117
+
118
+ def each
119
+ @buffers = {}
120
+ @incomplete = {}
121
+ data = @content.unpack('C*')
122
+ p = 0
123
+ p_start = 0
124
+ p_end = 0
125
+ pe = data.length
126
+ eof = data.length
127
+ @function_started = false
128
+
129
+ # begin: ragel
130
+ %% write init;
131
+ %% write exec;
132
+ # end: ragel
133
+ end
134
+ end
135
+ end
136
+ end
137
+ end
138
+ end
139
+
140
+ if __FILE__ == $0
141
+ $stdin.each_line do |line|
142
+ BELParser::Parsers::Common::Function.parse(line) { |obj|
143
+ puts obj.inspect
144
+ }
145
+ end
146
+ end
147
+
148
+ # vim: ft=ruby ts=2 sw=2:
149
+ # encoding: utf-8
@@ -9,6 +9,7 @@
9
9
  require_relative '../ast/node'
10
10
  require_relative '../mixin/buffer'
11
11
  require_relative '../nonblocking_io_wrapper'
12
+ require_relative '../tracer'
12
13
 
13
14
  module BELParser
14
15
  module Parsers
@@ -34,10 +35,11 @@ module BELParser
34
35
  include Enumerable
35
36
  include BELParser::Parsers::Buffer
36
37
  include BELParser::Parsers::AST::Sexp
38
+ include BELParser::Parsers::Tracer
37
39
 
38
40
  def initialize(content)
39
41
  @content = content
40
- # begin: ragel
42
+ # begin: ragel
41
43
 
42
44
  class << self
43
45
  attr_accessor :_bel_trans_keys
@@ -69,30 +71,30 @@ class << self
69
71
  private :_bel_indicies, :_bel_indicies=
70
72
  end
71
73
  self._bel_indicies = [
72
- 1, 1, 1, 1, 1, 1, 1, 1,
73
- 1, 1, 0, 0, 0, 0, 0, 0,
74
- 0, 1, 1, 1, 1, 1, 1, 1,
75
- 1, 1, 1, 1, 1, 1, 1, 1,
76
- 1, 1, 1, 1, 1, 1, 1, 1,
77
- 1, 1, 1, 0, 0, 0, 0, 1,
78
- 0, 1, 1, 1, 1, 1, 1, 1,
79
- 1, 1, 1, 1, 1, 1, 1, 1,
80
- 1, 1, 1, 1, 1, 1, 1, 1,
81
- 1, 1, 1, 0, 2, 0, 0, 0,
82
74
  0, 0, 0, 0, 0, 0, 0, 0,
75
+ 0, 0, 1, 1, 1, 1, 1, 1,
76
+ 1, 0, 0, 0, 0, 0, 0, 0,
83
77
  0, 0, 0, 0, 0, 0, 0, 0,
84
78
  0, 0, 0, 0, 0, 0, 0, 0,
79
+ 0, 0, 0, 1, 1, 1, 1, 0,
80
+ 1, 0, 0, 0, 0, 0, 0, 0,
85
81
  0, 0, 0, 0, 0, 0, 0, 0,
86
- 0, 0, 3, 3, 3, 3, 3, 3,
87
- 3, 3, 3, 3, 0, 0, 0, 0,
88
- 0, 0, 0, 3, 3, 3, 3, 3,
89
- 3, 3, 3, 3, 3, 3, 3, 3,
90
- 3, 3, 3, 3, 3, 3, 3, 3,
91
- 3, 3, 3, 3, 3, 0, 0, 0,
92
- 0, 3, 0, 3, 3, 3, 3, 3,
93
- 3, 3, 3, 3, 3, 3, 3, 3,
94
- 3, 3, 3, 3, 3, 3, 3, 3,
95
- 3, 3, 3, 3, 3, 0, 4, 0
82
+ 0, 0, 0, 0, 0, 0, 0, 0,
83
+ 0, 0, 0, 1, 3, 2, 2, 2,
84
+ 2, 2, 2, 2, 2, 2, 2, 2,
85
+ 2, 2, 2, 2, 2, 2, 2, 2,
86
+ 2, 2, 2, 2, 2, 2, 2, 2,
87
+ 2, 2, 2, 2, 2, 2, 2, 2,
88
+ 2, 2, 4, 4, 4, 4, 4, 4,
89
+ 4, 4, 4, 4, 2, 2, 2, 2,
90
+ 2, 2, 2, 4, 4, 4, 4, 4,
91
+ 4, 4, 4, 4, 4, 4, 4, 4,
92
+ 4, 4, 4, 4, 4, 4, 4, 4,
93
+ 4, 4, 4, 4, 4, 2, 2, 2,
94
+ 2, 4, 2, 4, 4, 4, 4, 4,
95
+ 4, 4, 4, 4, 4, 4, 4, 4,
96
+ 4, 4, 4, 4, 4, 4, 4, 4,
97
+ 4, 4, 4, 4, 4, 2, 2, 0
96
98
  ]
97
99
 
98
100
  class << self
@@ -100,7 +102,7 @@ class << self
100
102
  private :_bel_trans_targs, :_bel_trans_targs=
101
103
  end
102
104
  self._bel_trans_targs = [
103
- 0, 2, 3, 2, 0
105
+ 2, 0, 0, 3, 2
104
106
  ]
105
107
 
106
108
  class << self
@@ -108,7 +110,7 @@ class << self
108
110
  private :_bel_trans_actions, :_bel_trans_actions=
109
111
  end
110
112
  self._bel_trans_actions = [
111
- 1, 2, 3, 4, 0
113
+ 1, 0, 3, 4, 0
112
114
  ]
113
115
 
114
116
  class << self
@@ -116,7 +118,7 @@ class << self
116
118
  private :_bel_eof_actions, :_bel_eof_actions=
117
119
  end
118
120
  self._bel_eof_actions = [
119
- 0, 1, 1, 0
121
+ 0, 0, 2, 5
120
122
  ]
121
123
 
122
124
  class << self
@@ -126,29 +128,33 @@ self.bel_start = 1;
126
128
  class << self
127
129
  attr_accessor :bel_first_final
128
130
  end
129
- self.bel_first_final = 3;
131
+ self.bel_first_final = 2;
130
132
  class << self
131
133
  attr_accessor :bel_error
132
134
  end
133
135
  self.bel_error = 0;
134
136
 
135
137
  class << self
136
- attr_accessor :bel_en_ident
138
+ attr_accessor :bel_en_ident_node
137
139
  end
138
- self.bel_en_ident = 1;
140
+ self.bel_en_ident_node = 1;
139
141
 
140
142
 
141
- # end: ragel
143
+ # end: ragel
142
144
  end
143
145
 
144
146
  def each
145
- @buffers = {}
146
- data = @content.unpack('C*')
147
- p = 0
148
- pe = data.length
149
- eof = data.length
150
-
151
- # begin: ragel
147
+ @buffers = {}
148
+ @incomplete = {}
149
+ data = @content.unpack('C*')
150
+ p = 0
151
+ id_start = 0
152
+ id_end = 0
153
+ pe = data.length
154
+ eof = data.length
155
+
156
+ identifier_started = false
157
+ # begin: ragel
152
158
 
153
159
  begin
154
160
  p ||= 0
@@ -193,41 +199,31 @@ begin
193
199
  cs = _bel_trans_targs[_trans]
194
200
  if _bel_trans_actions[_trans] != 0
195
201
  case _bel_trans_actions[_trans]
196
- when 4 then
197
- begin
198
-
199
- (@buffers[:ident] ||= []) << data[p].ord
200
- end
201
- when 2 then
202
+ when 1 then
202
203
  begin
203
204
 
204
- @buffers[:ident] = []
205
+ trace('IDENTIFIER start_identifier')
206
+ @identifier_started = true
207
+ id_start = p;
205
208
  end
209
+ when 4 then
206
210
  begin
207
211
 
208
- (@buffers[:ident] ||= []) << data[p].ord
212
+ trace('IDENTIFIER end_identifier')
213
+ id_end = p
214
+ chars = data[id_start...id_end]
215
+ completed = !chars.empty?
216
+ ast_node = identifier(utf8_string(chars), complete: completed)
217
+ @buffers[:ident] = ast_node
209
218
  end
210
219
  when 3 then
211
220
  begin
212
221
 
213
- @buffers[:ident] = identifier(utf8_string(@buffers[:ident]))
214
- end
215
- begin
216
-
217
- yield @buffers[:ident]
218
- end
219
- when 1 then
220
- begin
221
-
222
- unless @buffers[:ident].is_a?(::AST::Node)
223
- @buffers[:ident] ||= []
224
- @buffers[:ident] = identifier(utf8_string(@buffers[:ident]).sub(/\n$/, ''))
225
- end
226
- end
227
- begin
228
-
229
- @buffers[:ident] ||= []
230
- yield @buffers[:ident]
222
+ trace('IDENTIFIER ident_node_err')
223
+ id_end = p
224
+ chars = data[id_start...id_end]
225
+ ast_node = identifier(utf8_string(chars), complete: false)
226
+ yield ast_node
231
227
  end
232
228
  end
233
229
  end
@@ -246,17 +242,25 @@ begin
246
242
  if _goto_level <= _test_eof
247
243
  if p == eof
248
244
  case _bel_eof_actions[cs]
249
- when 1 then
245
+ when 5 then
250
246
  begin
251
247
 
252
- unless @buffers[:ident].is_a?(::AST::Node)
253
- @buffers[:ident] ||= []
254
- @buffers[:ident] = identifier(utf8_string(@buffers[:ident]).sub(/\n$/, ''))
255
- end
248
+ trace('IDENTIFIER yield_identifier')
249
+ yield @buffers[:ident]
250
+ end
251
+ when 2 then
252
+ begin
253
+
254
+ trace('IDENTIFIER end_identifier')
255
+ id_end = p
256
+ chars = data[id_start...id_end]
257
+ completed = !chars.empty?
258
+ ast_node = identifier(utf8_string(chars), complete: completed)
259
+ @buffers[:ident] = ast_node
256
260
  end
257
261
  begin
258
262
 
259
- @buffers[:ident] ||= []
263
+ trace('IDENTIFIER yield_identifier')
260
264
  yield @buffers[:ident]
261
265
  end
262
266
  end
@@ -269,7 +273,7 @@ begin
269
273
  end
270
274
  end
271
275
 
272
- # end: ragel
276
+ # end: ragel
273
277
  end
274
278
  end
275
279
  end