packcr 0.0.6 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
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 -%>