packcr 0.0.6 → 0.0.8

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 (86) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +21 -0
  3. data/README.md +73 -0
  4. data/lib/packcr/cli.rb +18 -16
  5. data/lib/packcr/code_block.rb +0 -1
  6. data/lib/packcr/context.rb +20 -18
  7. data/lib/packcr/generated/context.rb +483 -0
  8. data/lib/packcr/generated/node/action_node.rb +60 -0
  9. data/lib/packcr/generated/node/alternate_node.rb +98 -0
  10. data/lib/packcr/generated/node/capture_node.rb +39 -0
  11. data/lib/packcr/generated/node/charclass_node.rb +372 -0
  12. data/lib/packcr/generated/node/eof_node.rb +20 -0
  13. data/lib/packcr/generated/node/error_node.rb +67 -0
  14. data/lib/packcr/generated/node/expand_node.rb +30 -0
  15. data/lib/packcr/generated/node/predicate_node.rb +140 -0
  16. data/lib/packcr/generated/node/quantity_node.rb +166 -0
  17. data/lib/packcr/generated/node/reference_node.rb +70 -0
  18. data/lib/packcr/generated/node/rule_node.rb +63 -0
  19. data/lib/packcr/generated/node/sequence_node.rb +42 -0
  20. data/lib/packcr/generated/node/string_node.rb +60 -0
  21. data/lib/packcr/generator.rb +2 -1
  22. data/lib/packcr/node/action_node.rb +4 -2
  23. data/lib/packcr/node/alternate_node.rb +3 -1
  24. data/lib/packcr/node/capture_node.rb +3 -1
  25. data/lib/packcr/node/charclass_node.rb +24 -28
  26. data/lib/packcr/node/eof_node.rb +4 -2
  27. data/lib/packcr/node/error_node.rb +3 -1
  28. data/lib/packcr/node/expand_node.rb +8 -5
  29. data/lib/packcr/node/predicate_node.rb +4 -2
  30. data/lib/packcr/node/quantity_node.rb +12 -10
  31. data/lib/packcr/node/reference_node.rb +11 -5
  32. data/lib/packcr/node/root_node.rb +1 -0
  33. data/lib/packcr/node/rule_node.rb +7 -4
  34. data/lib/packcr/node/sequence_node.rb +3 -1
  35. data/lib/packcr/node/string_node.rb +9 -6
  36. data/lib/packcr/node.rb +3 -5
  37. data/lib/packcr/parser.rb +4389 -4064
  38. data/lib/packcr/stream.rb +17 -12
  39. data/lib/packcr/templates/context/header.c.erb +3 -3
  40. data/lib/packcr/templates/context/source.c.erb +481 -690
  41. data/lib/packcr/templates/context/source.rb.erb +123 -171
  42. data/lib/packcr/templates/node/action.c.erb +5 -5
  43. data/lib/packcr/templates/node/action.rb.erb +2 -2
  44. data/lib/packcr/templates/node/alternate.c.erb +9 -9
  45. data/lib/packcr/templates/node/alternate.rb.erb +4 -5
  46. data/lib/packcr/templates/node/capture.c.erb +7 -7
  47. data/lib/packcr/templates/node/capture.rb.erb +4 -4
  48. data/lib/packcr/templates/node/charclass.c.erb +12 -12
  49. data/lib/packcr/templates/node/charclass.rb.erb +6 -6
  50. data/lib/packcr/templates/node/charclass_any.c.erb +3 -3
  51. data/lib/packcr/templates/node/charclass_any.rb.erb +2 -2
  52. data/lib/packcr/templates/node/charclass_fail.c.erb +1 -1
  53. data/lib/packcr/templates/node/charclass_one.c.erb +10 -10
  54. data/lib/packcr/templates/node/charclass_one.rb.erb +6 -6
  55. data/lib/packcr/templates/node/charclass_utf8.c.erb +8 -8
  56. data/lib/packcr/templates/node/charclass_utf8.rb.erb +3 -3
  57. data/lib/packcr/templates/node/charclass_utf8_reverse.rb.erb +5 -5
  58. data/lib/packcr/templates/node/eof.c.erb +1 -1
  59. data/lib/packcr/templates/node/error.c.erb +11 -11
  60. data/lib/packcr/templates/node/error.rb.erb +2 -2
  61. data/lib/packcr/templates/node/expand.c.erb +5 -5
  62. data/lib/packcr/templates/node/expand.rb.erb +3 -3
  63. data/lib/packcr/templates/node/predicate.c.erb +10 -10
  64. data/lib/packcr/templates/node/predicate.rb.erb +6 -6
  65. data/lib/packcr/templates/node/predicate_neg.c.erb +8 -8
  66. data/lib/packcr/templates/node/predicate_neg.rb.erb +6 -6
  67. data/lib/packcr/templates/node/quantity_many.c.erb +47 -0
  68. data/lib/packcr/templates/node/{quantify_many.rb.erb → quantity_many.rb.erb} +9 -9
  69. data/lib/packcr/templates/node/quantity_one.c.erb +23 -0
  70. data/lib/packcr/templates/node/{quantify_one.rb.erb → quantity_one.rb.erb} +8 -8
  71. data/lib/packcr/templates/node/reference.c.erb +14 -2
  72. data/lib/packcr/templates/node/reference.rb.erb +16 -4
  73. data/lib/packcr/templates/node/reference_reverse.rb.erb +16 -4
  74. data/lib/packcr/templates/node/rule.c.erb +14 -7
  75. data/lib/packcr/templates/node/rule.rb.erb +26 -19
  76. data/lib/packcr/templates/node/string_many.c.erb +6 -6
  77. data/lib/packcr/templates/node/string_many.rb.erb +3 -3
  78. data/lib/packcr/templates/node/string_one.c.erb +5 -5
  79. data/lib/packcr/templates/node/string_one.rb.erb +3 -3
  80. data/lib/packcr/util.rb +21 -16
  81. data/lib/packcr/version.rb +1 -1
  82. data/lib/packcr.rb +8 -11
  83. metadata +40 -10
  84. data/lib/packcr/templates/node/quantify_many.c.erb +0 -45
  85. data/lib/packcr/templates/node/quantify_one.c.erb +0 -21
  86. data/lib/packcr/tokenizer.rb +0 -2948
@@ -1,30 +1,35 @@
1
1
  # A packrat parser generated by PackCR <%= Packcr::VERSION %>
2
- <%- if !code(:source).empty? -%>
2
+ <%- if !code(:esource).empty? -%>
3
3
 
4
- <%- code(:source).each do |code| -%>
4
+ <%- code(:esource).each do |code| -%>
5
5
  <%= stream.get_code_block(code, 0, @iname) -%>
6
6
  <%- end -%>
7
7
  <%- end -%>
8
-
9
8
  class <%= class_name %>
9
+ <%- code(:location).each do |code| -%>
10
+ <%- %><%= stream.get_code_block(code, 2, @iname) -%>
11
+
12
+ <%- end -%>
13
+ <%- code(:source).each do |code| -%>
14
+ <%= stream.get_code_block(code, 2, @iname) -%>
15
+
16
+ <%- end -%>
10
17
  def initialize(<% if @auxil_type %><%= auxil_type %>, <% end %>debug: false)
11
18
  <%- if @utf8 -%>
12
19
  @buffer = +""
13
20
  <%- else -%>
14
21
  @buffer = +"".b
15
22
  <%- end %>
16
- @pos = 0
17
- @cur = 0
23
+ @buffer_start_position = 0
24
+ @position_offset = 0
18
25
  @level = 0
19
- @lrstack = []
20
26
  @thunk = ThunkNode.new([], nil, 0)
21
- @heads = {}
22
27
  @memos = LrMemoTable.new
23
28
  @debug = debug
24
29
  @global_values = {}
25
30
  <%- if @location -%>
26
- @pos_loc = Location.new
27
- @cur_loc = Location.new
31
+ @buffer_start_position_loc = Location.new
32
+ @position_offset_loc = Location.new
28
33
  <%- end -%>
29
34
  <%- code(:init).each do |code| -%>
30
35
  <%- %><%= stream.get_code_block(code, 4, @iname) -%>
@@ -45,34 +50,33 @@ class <%= class_name %>
45
50
 
46
51
  def refill_buffer(num, mode = nil)
47
52
  len = @buffer.length
48
- if len >= @cur + num
49
- return len - @cur
53
+ if len >= @position_offset + num
54
+ return len - @position_offset
50
55
  end
51
- while len < @cur + num
56
+ while len < @position_offset + num
52
57
  c = getc
53
58
  break if !c
54
59
  @buffer << c
55
60
  len = @buffer.length
56
61
  end
57
- return len - @cur
62
+ return len - @position_offset
58
63
  end
59
64
 
60
65
  def commit_buffer
61
- @buffer = @buffer[@cur, @buffer.length - @cur]
62
- @pos += @cur
63
- @heads.clear
66
+ @buffer = @buffer[@position_offset, @buffer.length - @position_offset]
67
+ @buffer_start_position += @position_offset
64
68
  @memos.clear
65
- @cur = 0
69
+ @position_offset = 0
66
70
  <%- if @location -%>
67
- @pos_loc = @pos_loc + @cur_loc
68
- @cur_loc = Location.new
71
+ @buffer_start_position_loc = @buffer_start_position_loc + @position_offset_loc
72
+ @position_offset_loc = Location.new
69
73
  <%- end -%>
70
74
  end
71
75
 
72
76
  def parse
73
- pos = @pos
77
+ pos = @buffer_start_position
74
78
  <%- if !@root.rules.empty? -%>
75
- if apply_rule(:evaluate_rule_<%= @root.rules[0].name %>, @thunk.thunks, nil, 0)
79
+ if apply_rule(:evaluate_rule_<%= @root.rules[0].name %>, @thunk.thunks, nil, 0, @buffer_start_position<% if @location %>, @buffer_start_position_loc<% end %>)
76
80
  @thunk.do_action(self, nil, 0)
77
81
  else
78
82
  raise SyntaxError, "can't parse"
@@ -80,7 +84,7 @@ class <%= class_name %>
80
84
  commit_buffer
81
85
  <%- end -%>
82
86
  @thunk.clear
83
- refill_buffer(1) >= 1 && pos != @pos
87
+ refill_buffer(1) >= 1 && pos != @buffer_start_position
84
88
  end
85
89
 
86
90
  def run
@@ -89,153 +93,128 @@ class <%= class_name %>
89
93
 
90
94
  <%- @root.rules.each do |rule| -%>
91
95
  <%- rule.codes.each do |code| -%>
92
- def action_<%= rule.name %>_<%= code.index %>(__pcc_in, __pcc_vars, __pcc_index)
93
- ____ = (__pcc_vars[__pcc_index] ||= Value.new).value if __pcc_vars
96
+ def action_<%= rule.name %>_<%= code.index %>(__packcr_in, __packcr_vars, __packcr_index)
97
+ ____ = (__packcr_vars[__packcr_index] ||= Value.new).value if __packcr_vars
94
98
  <%- code.vars.each do |ref| -%>
95
- <%= ref.var %> = (__pcc_in.value_refs[<%= ref.index %>] ||= Value.new).value
99
+ <%= ref.var %> = (__packcr_in.value_refs[<%= ref.index %>] ||= Value.new).value
96
100
  <%- end -%>
97
- __0 = __pcc_in.capt0.capture_string(@buffer)
98
- __0s = @pos + __pcc_in.capt0.range_start
99
- __0e = @pos + __pcc_in.capt0.range_end
101
+ __0 = __packcr_in.capt0.capture_string(@buffer)
102
+ __0s = @buffer_start_position + __packcr_in.capt0.range_start
103
+ __0e = @buffer_start_position + __packcr_in.capt0.range_end
100
104
  <%- if @location -%>
101
- __0sl = @pos_loc + __pcc_in.capt0.start_loc
102
- __0el = @pos_loc + __pcc_in.capt0.end_loc
105
+ __0sl = @buffer_start_position_loc + __packcr_in.capt0.start_loc
106
+ __0el = @buffer_start_position_loc + __packcr_in.capt0.end_loc
103
107
  <%- end -%>
104
108
  <%- if @capture_in_code -%>
105
- __0c = __pcc_in.capt0
109
+ __0c = __packcr_in.capt0
106
110
  <%- end -%>
107
111
  <%- code.capts.each do |capture| -%>
108
- __<%= capture.index + 1 %> = __pcc_in.capts[<%= capture.index %>].capture_string(@buffer)
109
- __<%= capture.index + 1 %>s = @pos + __pcc_in.capts[<%= capture.index %>].range_start
110
- __<%= capture.index + 1 %>e = @pos + __pcc_in.capts[<%= capture.index %>].range_end
112
+ __<%= capture.index + 1 %> = __packcr_in.capts[<%= capture.index %>].capture_string(@buffer)
113
+ __<%= capture.index + 1 %>s = @buffer_start_position + __packcr_in.capts[<%= capture.index %>].range_start
114
+ __<%= capture.index + 1 %>e = @buffer_start_position + __packcr_in.capts[<%= capture.index %>].range_end
111
115
  <%- if @location -%>
112
- __<%= capture.index + 1 %>sl = @pos_loc + __pcc_in.capts[<%= capture.index %>].start_loc
113
- __<%= capture.index + 1 %>el = @pos_loc + __pcc_in.capts[<%= capture.index %>].end_loc
116
+ __<%= capture.index + 1 %>sl = @buffer_start_position_loc + __packcr_in.capts[<%= capture.index %>].start_loc
117
+ __<%= capture.index + 1 %>el = @buffer_start_position_loc + __packcr_in.capts[<%= capture.index %>].end_loc
114
118
  <%- end -%>
115
119
  <%- if @capture_in_code -%>
116
- __<%= capture.index + 1 %>c = __pcc_in.capts[<%= capture.index %>]
120
+ __<%= capture.index + 1 %>c = __packcr_in.capts[<%= capture.index %>]
117
121
  <%- end -%>
118
122
  <%- end -%>
119
123
  <%- %><%= stream.get_code_block(code.code, 4, @iname) -%>
120
124
 
121
- __pcc_vars[__pcc_index].value = ____ if __pcc_vars
125
+ __packcr_vars[__packcr_index].value = ____ if __packcr_vars
122
126
  end
123
127
 
124
128
  <%- end -%>
125
129
  <%- end -%>
126
130
  <%- @root.rules.each do |rule| -%>
127
- def evaluate_rule_<%= rule.name %>
128
- answer = ThunkChunk.new
129
- answer.pos = @cur
130
- <%- if @location -%>
131
- answer.pos_loc = @cur_loc
132
- <%- end -%>
133
- <%- gen = ::Packcr::Generator.new(rule, @ascii, @location, :rb) -%>
134
- <%- -%><%= gen.generate_code(rule, 0, 4, false) -%>
135
- end
131
+ <%- gen = ::Packcr::Generator.new(rule, @ascii, @location, :rb) -%>
132
+ <%- -%><%= gen.generate_code(rule, 0, 2, false) -%>
136
133
 
137
134
  <%- end -%>
138
- def setup_lr(rule, lr)
139
- lr.head ||= LrHead.new(rule)
140
- @lrstack.reverse_each do |lrentry|
141
- if lrentry.head == lr.head
142
- break
143
- end
144
- lrentry.head = lr.head
145
- lr.head.involved_set[lrentry.rule] = true
146
- end
147
- end
148
-
149
- def grow_lr(rule, memo, head, pos<% if @location %>, p_loc<% end %>)
150
- @heads[pos] = head
135
+ def grow_lr(rule, offset<% if @location %>, offset_loc<% end %>)
151
136
  while true
152
- @cur = pos - @pos
137
+ old_offset = @position_offset
138
+ @position_offset = offset
153
139
  <%- if @location -%>
154
- @cur_loc = p_loc - @pos_loc
140
+ @position_offset_loc = offset_loc
155
141
  <%- end -%>
156
- head.involved_set_to_eval_set
157
- answer = public_send(rule)
158
- if !answer || @pos + @cur <= memo.pos
142
+ answer = public_send(rule, offset<% if @location %>, offset_loc<% end %>, limits: {rule => true})
143
+ if !answer || @position_offset <= old_offset
159
144
  break
160
145
  end
146
+ memo = @memos[offset, rule]
161
147
  memo.answer = answer
162
- memo.pos = @pos + @cur
148
+ memo.offset = @position_offset
163
149
  <%- if @location -%>
164
- memo.pos_loc = @pos_loc + @cur_loc
150
+ memo.offset_loc = @position_offset_loc
165
151
  <%- end -%>
166
152
  end
167
- @heads[pos] = nil
168
- @cur = memo.pos - @pos
169
- <%- if @location -%>
170
- @cur_loc = memo.pos_loc - @pos_loc
171
- <%- end -%>
172
- memo.answer
173
- end
174
-
175
- def lr_answer(rule, memo, pos<% if @location %>, p_loc<% end %>)
176
- head = memo.lr.head
177
- if head.rule_name != rule
178
- return memo.lr.seed
179
- end
180
-
181
- memo.answer = memo.lr.seed
182
- if !memo.answer
183
- return nil
184
- end
185
- grow_lr(rule, memo, head, pos<% if @location %>, p_loc<% end %>)
186
153
  end
187
154
 
188
155
  def rule_answer(rule)
189
- pos = @pos + @cur
156
+ offset = @position_offset
190
157
  <%- if @location -%>
191
- p_loc = @pos_loc + @cur_loc
158
+ offset_loc = @position_offset_loc
192
159
  <%- end -%>
193
- memo = @memos[pos, rule]
194
- head = @heads[pos]
160
+ memo = @memos[offset, rule]
195
161
 
196
- if head
197
- if !memo && rule != head.rule_name && !head.involved_set[rule]
198
- return nil
199
- end
200
- if head.eval_set.delete(rule)
201
- return public_send(rule)
202
- end
203
- end
204
-
205
- if memo
206
- @cur = memo.pos - @pos
162
+ if !memo
163
+ memo = LrMemo.new(offset<% if @location %>, offset_loc<% end %>)
164
+ @memos[offset, rule] = memo
165
+ answer = public_send(rule, offset<% if @location %>, offset_loc<% end %>)
166
+ memo.answer = answer
167
+ memo.offset = @position_offset
207
168
  <%- if @location -%>
208
- @cur_loc = memo.pos_loc - @pos_loc
169
+ memo.offset_loc = @position_offset_loc
209
170
  <%- end -%>
210
- if !memo.lr
211
- return memo.answer
171
+ if memo.grow
172
+ grow_lr(rule, offset<% if @location %>, offset_loc<% end %>)
173
+ memo.grow = false
174
+ answer = memo.answer
175
+ @position_offset = memo.offset
176
+ <%- if @location -%>
177
+ @position_offset_loc = memo.offset_loc
178
+ <%- end -%>
212
179
  end
213
- setup_lr(rule, memo.lr)
214
- return memo.lr.seed
215
- end
216
-
217
- lr = LrEntry.new
218
- lr.rule = rule
219
- @lrstack.push(lr)
220
- memo = LrMemo.new(lr, pos<% if @location %>, p_loc<% end %>)
221
- @memos[pos, rule] = memo
222
- answer = public_send(rule)
223
- @lrstack.pop
224
- memo.pos = @pos + @cur
225
- <%- if @location -%>
226
- memo.pos_loc = @pos_loc + @cur_loc
227
- <%- end -%>
228
- if !lr.head
229
- memo.answer = answer
230
180
  return answer
181
+ elsif memo.fail
182
+ memo.answer = nil
183
+ memo.grow = true
184
+ return nil
185
+ else
186
+ @position_offset = memo.offset
187
+ <%- if @location -%>
188
+ @position_offset_loc = memo.offset_loc
189
+ <%- end -%>
190
+ return memo.answer
231
191
  end
232
-
233
- lr.seed = answer
234
- lr_answer(rule, memo, pos<% if @location %>, p_loc<% end %>)
235
192
  end
236
193
 
237
- def apply_rule(rule, thunks, values, index)
238
- answer = rule_answer(rule)
194
+ def apply_rule(rule, thunks, values, index, offset<% if @location %>, offset_loc<% end %>, limits: nil)
195
+ if limits
196
+ limits = limits.merge(rule => true)
197
+ answer = public_send(rule, offset<% if @location %>, offset_loc<% end %>, limits: limits)
198
+ memo = @memos[offset, rule]
199
+ if !answer || @position_offset <= memo.offset
200
+ if memo
201
+ answer = memo.answer
202
+ @position_offset = memo.offset
203
+ <%- if @location -%>
204
+ @position_offset_loc = memo.offset_loc
205
+ <%- end -%>
206
+ end
207
+ else
208
+ memo.answer = answer
209
+ memo.offset = @position_offset
210
+ <%- if @location -%>
211
+ memo.offset_loc = @position_offset_loc
212
+ <%- end -%>
213
+ end
214
+ else
215
+ answer = rule_answer(rule)
216
+ end
217
+
239
218
  if !answer
240
219
  return false
241
220
  end
@@ -250,10 +229,6 @@ class <%= class_name %>
250
229
  end
251
230
  end
252
231
 
253
- <%- code(:location).each do |code| -%>
254
- <%- %><%= stream.get_code_block(code, 2, @iname) -%>
255
-
256
- <%- end -%>
257
232
  class LrMemoTable
258
233
  def initialize
259
234
  @memos = {}
@@ -273,20 +248,24 @@ class <%= class_name %>
273
248
  end
274
249
  end
275
250
 
276
- class LrHead
277
- attr_accessor :rule_name, :involved_set, :eval_set
251
+ class LrMemo
252
+ attr_accessor :grow, :answer, :offset, :fail
253
+ <%- if @location -%>
254
+ attr_accessor :offset_loc
255
+ <%- end -%>
278
256
 
279
- def initialize(rule_name)
280
- @rule_name = rule_name
281
- @involved_set = {}
282
- @eval_set = {}
257
+ def initialize(offset<% if @location %>, offset_loc<% end %>)
258
+ @offset = offset
259
+ <%- if @location -%>
260
+ @offset_loc = offset_loc
261
+ <%- end -%>
262
+ @fail = true
263
+ @grow = false
283
264
  end
284
265
 
285
- def involved_set_to_eval_set
286
- @eval_set.clear
287
- @involved_set.each do |k, v|
288
- @eval_set[k] = true
289
- end
266
+ def answer=(answer)
267
+ @fail = nil
268
+ @answer = answer
290
269
  end
291
270
  end
292
271
 
@@ -311,10 +290,7 @@ class <%= class_name %>
311
290
  end
312
291
  end
313
292
 
314
- class Thunk
315
- end
316
-
317
- class ThunkLeaf < Thunk
293
+ class ThunkLeaf
318
294
  attr_accessor :capt0, :capts, :value_refs, :action
319
295
 
320
296
  def initialize(action, capt0 = Capture.new, value_refs = {}, capts = {})
@@ -329,7 +305,7 @@ class <%= class_name %>
329
305
  end
330
306
  end
331
307
 
332
- class ThunkNode < Thunk
308
+ class ThunkNode
333
309
  attr_accessor :thunks, :values, :index
334
310
 
335
311
  def initialize(thunks, values, index)
@@ -350,10 +326,6 @@ class <%= class_name %>
350
326
  end
351
327
  end
352
328
 
353
- class LrEntry
354
- attr_accessor :rule, :head, :seed
355
- end
356
-
357
329
  class Capture
358
330
  attr_accessor :range_start, :range_end
359
331
  <%- if @location -%>
@@ -370,27 +342,7 @@ class <%= class_name %>
370
342
  end
371
343
 
372
344
  def capture_string(buffer)
373
- @string ||= buffer[@range_start, @range_end - @range_start]
374
- end
375
- end
376
-
377
- class LrMemo
378
- attr_accessor :lr, :answer, :pos
379
- <%- if @location -%>
380
- attr_accessor :pos_loc
381
- <%- end -%>
382
-
383
- def initialize(lr, pos<% if @location %>, pos_loc<% end %>)
384
- @pos = pos
385
- <%- if @location -%>
386
- @pos_loc = pos_loc
387
- <%- end -%>
388
- @lr = lr
389
- end
390
-
391
- def answer=(answer)
392
- @lr = nil
393
- @answer = answer
345
+ @capture_string ||= buffer[@range_start, @range_end - @range_start]
394
346
  end
395
347
  end
396
348
 
@@ -1,5 +1,5 @@
1
1
  {
2
- pcc_thunk_t *const thunk = pcc_thunk__create_leaf(ctx->auxil, pcc_action_<%= gen.rule.name %>_<%= index %>, <%= gen.rule.vars.length %>, <%= gen.rule.capts.length %>);
2
+ packcr_thunk_t *const thunk = packcr_thunk__create_leaf(ctx->auxil, packcr_action_<%= gen.rule.name %>_<%= index %>, <%= gen.rule.vars.length %>, <%= gen.rule.capts.length %>);
3
3
  <%- vars.each do |var| -%>
4
4
  thunk->data.leaf.values.buf[<%= var.index %>] = &(chunk->values.buf[<%= var.index %>]);
5
5
  <%- end -%>
@@ -7,10 +7,10 @@
7
7
  thunk->data.leaf.capts.buf[<%= capt.index %>] = &(chunk->capts.buf[<%= capt.index %>]);
8
8
  <%- end -%>
9
9
  thunk->data.leaf.capt0.range.start = chunk->pos;
10
- thunk->data.leaf.capt0.range.end = ctx->cur;
10
+ thunk->data.leaf.capt0.range.end = ctx->position_offset;
11
11
  <%- if gen.location -%>
12
- thunk->data.leaf.capt0.range.start_loc_ptr = &chunk->pos_loc;
13
- thunk->data.leaf.capt0.range.end_loc_ptr = &ctx->cur_loc;
12
+ thunk->data.leaf.capt0.range.start_loc = chunk->pos_loc;
13
+ thunk->data.leaf.capt0.range.end_loc = ctx->position_offset_loc;
14
14
  <%- end -%>
15
- pcc_thunk_array__add(ctx->auxil, &chunk->thunks, thunk);
15
+ packcr_thunk_array__add(ctx->auxil, &chunk->thunks, thunk);
16
16
  }
@@ -2,9 +2,9 @@ answer.thunks.push(
2
2
  ThunkLeaf.new(
3
3
  :action_<%= gen.rule.name %>_<%= index %>,
4
4
  Capture.new(
5
- answer.pos, @cur,
5
+ answer.pos, @position_offset,
6
6
  <%- if gen.location -%>
7
- answer.pos_loc, @cur_loc,
7
+ answer.pos_loc, @position_offset_loc,
8
8
  <%- end -%>
9
9
  ),
10
10
  <%- if vars.empty? -%>
@@ -1,8 +1,8 @@
1
1
  <%- m = gen.next_label -%>
2
2
  {
3
- const size_t p = ctx->cur;
3
+ const size_t p = ctx->position_offset;
4
4
  <%- if gen.location -%>
5
- const pcc_location_t p_loc = ctx->cur_loc;
5
+ const packcr_location_t p_loc = ctx->position_offset_loc;
6
6
  <%- end -%>
7
7
  const size_t n = chunk->thunks.len;
8
8
  <%- nodes.each_with_index do |expr, i| -%>
@@ -17,18 +17,18 @@
17
17
  <%- break -%>
18
18
  <%- else -%>
19
19
  <%- if r == Packcr::CODE_REACH__BOTH -%>
20
- goto L<%= "%04d" % m %>;
20
+ goto L<%= format("%04d", m) %>;
21
21
  <%- end -%>
22
22
  <%- end -%>
23
- L<%= "%04d" % l %>:;
24
- ctx->cur = p;
23
+ L<%= format("%04d", l) %>:;
24
+ ctx->position_offset = p;
25
25
  <%- if gen.location -%>
26
- ctx->cur_loc = p_loc;
26
+ ctx->position_offset_loc = p_loc;
27
27
  <%- end -%>
28
- pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n);
28
+ packcr_thunk_array__revert(ctx->auxil, &chunk->thunks, n);
29
29
  <%- if !c -%>
30
- goto L<%= "%04d" % onfail %>;
30
+ goto L<%= format("%04d", onfail) %>;
31
31
  <%- end -%>
32
32
  <%- end -%>
33
- L<%= "%04d" % m %>:;
33
+ L<%= format("%04d", m) %>:;
34
34
  }
@@ -1,14 +1,13 @@
1
1
  <%- m = gen.next_label -%>
2
2
  catch(<%= m %>) do
3
- pos<%= gen.level %> = @cur
3
+ pos<%= gen.level %> = @position_offset
4
4
  <%- if gen.location -%>
5
- p_loc<%= gen.level %> = @cur_loc
5
+ p_loc<%= gen.level %> = @position_offset_loc
6
6
  <%- end -%>
7
7
  n<%= gen.level %> = answer.thunks.length
8
8
  <%- nodes.each_with_index do |expr, i| -%>
9
9
  <%- c = i + 1 < nodes.length -%>
10
10
  <%- if expr.reversible?(gen) -%>
11
- <%- r = expr.reachability -%>
12
11
  <%- %><%= gen.generate_code(expr, m, 2, false, reverse: true, oncut: onfail) -%>
13
12
  <%- else -%>
14
13
  <%- l = gen.next_label -%>
@@ -28,9 +27,9 @@ catch(<%= m %>) do
28
27
  <%- end -%>
29
28
  end
30
29
  <%- end -%>
31
- @cur = pos<%= gen.level %>
30
+ @position_offset = pos<%= gen.level %>
32
31
  <%- if gen.location -%>
33
- @cur_loc = p_loc<%= gen.level %>
32
+ @position_offset_loc = p_loc<%= gen.level %>
34
33
  <%- end -%>
35
34
  answer.thunks[n<%= gen.level %>..-1] = []
36
35
  <%- if !c -%>
@@ -1,17 +1,17 @@
1
1
  {
2
- const size_t p = ctx->cur;
2
+ const size_t p = ctx->position_offset;
3
3
  size_t q;
4
4
  <%- if gen.location -%>
5
- pcc_location_t p_loc = ctx->cur_loc;
6
- pcc_location_t q_loc;
5
+ packcr_location_t p_loc = ctx->position_offset_loc;
6
+ packcr_location_t q_loc;
7
7
  <%- end -%>
8
8
  <%= gen.generate_code(expr, onfail, 4, false) -%>
9
- q = ctx->cur;
9
+ q = ctx->position_offset;
10
10
  chunk->capts.buf[<%= index %>].range.start = p;
11
11
  chunk->capts.buf[<%= index %>].range.end = q;
12
12
  <%- if gen.location -%>
13
- q_loc = ctx->cur_loc;
14
- *chunk->capts.buf[<%= index %>].range.start_loc_ptr = p_loc;
15
- *chunk->capts.buf[<%= index %>].range.end_loc_ptr = q_loc;
13
+ q_loc = ctx->position_offset_loc;
14
+ chunk->capts.buf[<%= index %>].range.start_loc = p_loc;
15
+ chunk->capts.buf[<%= index %>].range.end_loc = q_loc;
16
16
  <%- end -%>
17
17
  }
@@ -1,14 +1,14 @@
1
- pos<%= gen.level %> = @cur
1
+ pos<%= gen.level %> = @position_offset
2
2
  <%- if gen.location -%>
3
- p_loc<%= gen.level %> = @cur_loc
3
+ p_loc<%= gen.level %> = @position_offset_loc
4
4
  <%- end -%>
5
5
  <%- %><%= gen.generate_code(expr, onfail, 0, false) -%>
6
- q<%= gen.level %> = @cur
6
+ q<%= gen.level %> = @position_offset
7
7
  capt<%= gen.level %> = answer.capts[<%= index %>]
8
8
  capt<%= gen.level %>.range_start = pos<%= gen.level %>
9
9
  capt<%= gen.level %>.range_end = q<%= gen.level %>
10
10
  <%- if gen.location -%>
11
- q_loc<%= gen.level %> = @cur_loc
11
+ q_loc<%= gen.level %> = @position_offset_loc
12
12
  capt<%= gen.level %>.start_loc = p_loc<%= gen.level %>
13
13
  capt<%= gen.level %>.end_loc = q_loc<%= gen.level %>
14
14
  <%- end -%>
@@ -1,21 +1,21 @@
1
1
  {
2
2
  <%- if !a && charclass =~ /\A[^\\]-.\z/ -%>
3
3
  char c;
4
- if (pcc_refill_buffer(ctx, 1) < 1) goto L<%= "%04d" % onfail %>;
5
- c = ctx->buffer.buf[ctx->cur];
4
+ if (packcr_refill_buffer(ctx, 1) < 1) goto L<%= format("%04d", onfail) %>;
5
+ c = ctx->buffer.buf[ctx->position_offset];
6
6
  <%- if a -%>
7
- if (c >= '<%= Packcr.escape_character(charclass[0]) %>' && c <= '<%= Packcr.escape_character(charclass[2]) %>') goto L<%= "%04d" % onfail %>;
7
+ if (c >= '<%= Packcr.escape_character(charclass[0]) %>' && c <= '<%= Packcr.escape_character(charclass[2]) %>') goto L<%= format("%04d", onfail) %>;
8
8
  <%- else -%>
9
- if (!(c >= '<%= Packcr.escape_character(charclass[0]) %>' && c <= '<%= Packcr.escape_character(charclass[2]) %>')) goto L<%= "%04d" % onfail %>;
9
+ if (!(c >= '<%= Packcr.escape_character(charclass[0]) %>' && c <= '<%= Packcr.escape_character(charclass[2]) %>')) goto L<%= format("%04d", onfail) %>;
10
10
  <%- end -%>
11
11
  <%- if gen.location -%>
12
- pcc_location_forward(&ctx->cur_loc, ctx->buffer.buf + ctx->cur, 1);
12
+ packcr_location_forward(&ctx->position_offset_loc, ctx->buffer.buf + ctx->position_offset, 1);
13
13
  <%- end -%>
14
- ctx->cur++;
14
+ ctx->position_offset++;
15
15
  <%- else -%>
16
16
  char c;
17
- if (pcc_refill_buffer(ctx, 1) < 1) goto L<%= "%04d" % onfail %>;
18
- c = ctx->buffer.buf[ctx->cur];
17
+ if (packcr_refill_buffer(ctx, 1) < 1) goto L<%= format("%04d", onfail) %>;
18
+ c = ctx->buffer.buf[ctx->position_offset];
19
19
  <%- if a -%>
20
20
  if (
21
21
  <%- else -%>
@@ -35,13 +35,13 @@
35
35
  <%- i += 1 -%>
36
36
  <%- end -%>
37
37
  <%- if a -%>
38
- ) goto L<%= "%04d" % onfail %>;
38
+ ) goto L<%= format("%04d", onfail) %>;
39
39
  <%- else -%>
40
- )) goto L<%= "%04d" % onfail %>;
40
+ )) goto L<%= format("%04d", onfail) %>;
41
41
  <%- end -%>
42
42
  <%- if gen.location -%>
43
- pcc_location_forward(&ctx->cur_loc, ctx->buffer.buf + ctx->cur, 1);
43
+ packcr_location_forward(&ctx->position_offset_loc, ctx->buffer.buf + ctx->position_offset, 1);
44
44
  <%- end -%>
45
- ctx->cur++;
45
+ ctx->position_offset++;
46
46
  <%- end -%>
47
47
  }
@@ -2,7 +2,7 @@
2
2
  if refill_buffer(1) < 1
3
3
  throw(<%= onfail %>)
4
4
  end
5
- c<%= gen.level %> = @buffer[@cur]
5
+ c<%= gen.level %> = @buffer[@position_offset]
6
6
  <%- if a -%>
7
7
  if c<%= gen.level %> >= "<%= Packcr.escape_character(charclass[0]) %>" && c<%= gen.level %> <= "<%= Packcr.escape_character(charclass[2]) %>"
8
8
  throw(<%= onfail %>)
@@ -13,14 +13,14 @@ unless c<%= gen.level %> >= "<%= Packcr.escape_character(charclass[0]) %>" && c<
13
13
  end
14
14
  <%- end -%>
15
15
  <%- if gen.location -%>
16
- @cur_loc = @cur_loc.forward(@buffer, @cur, 1)
16
+ @position_offset_loc = @position_offset_loc.forward(@buffer, @position_offset, 1)
17
17
  <%- end -%>
18
- @cur += 1
18
+ @position_offset += 1
19
19
  <%- else -%>
20
20
  if refill_buffer(1) < 1
21
21
  throw(<%= onfail %>)
22
22
  end
23
- c<%= gen.level %> = @buffer[@cur]
23
+ c<%= gen.level %> = @buffer[@position_offset]
24
24
  <%- if a -%>
25
25
  if (
26
26
  <%- else -%>
@@ -43,7 +43,7 @@ unless (
43
43
  throw(<%= onfail %>)
44
44
  end
45
45
  <%- if gen.location -%>
46
- @cur_loc = @cur_loc.forward(@buffer, @cur, 1)
46
+ @position_offset_loc = @position_offset_loc.forward(@buffer, @position_offset, 1)
47
47
  <%- end -%>
48
- @cur += 1
48
+ @position_offset += 1
49
49
  <%- end -%>