packcr 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (81) hide show
  1. checksums.yaml +4 -4
  2. data/lib/packcr/cli.rb +18 -16
  3. data/lib/packcr/code_block.rb +0 -1
  4. data/lib/packcr/context.rb +19 -17
  5. data/lib/packcr/generated/context.rb +440 -0
  6. data/lib/packcr/generated/node/action_node.rb +60 -0
  7. data/lib/packcr/generated/node/alternate_node.rb +98 -0
  8. data/lib/packcr/generated/node/capture_node.rb +39 -0
  9. data/lib/packcr/generated/node/charclass_node.rb +372 -0
  10. data/lib/packcr/generated/node/eof_node.rb +20 -0
  11. data/lib/packcr/generated/node/error_node.rb +67 -0
  12. data/lib/packcr/generated/node/expand_node.rb +30 -0
  13. data/lib/packcr/generated/node/predicate_node.rb +140 -0
  14. data/lib/packcr/generated/node/quantity_node.rb +167 -0
  15. data/lib/packcr/generated/node/reference_node.rb +70 -0
  16. data/lib/packcr/generated/node/rule_node.rb +63 -0
  17. data/lib/packcr/generated/node/sequence_node.rb +42 -0
  18. data/lib/packcr/generated/node/string_node.rb +60 -0
  19. data/lib/packcr/generator.rb +2 -1
  20. data/lib/packcr/node/action_node.rb +4 -2
  21. data/lib/packcr/node/alternate_node.rb +3 -1
  22. data/lib/packcr/node/capture_node.rb +3 -1
  23. data/lib/packcr/node/charclass_node.rb +24 -28
  24. data/lib/packcr/node/eof_node.rb +4 -2
  25. data/lib/packcr/node/error_node.rb +3 -1
  26. data/lib/packcr/node/expand_node.rb +8 -5
  27. data/lib/packcr/node/predicate_node.rb +4 -2
  28. data/lib/packcr/node/quantity_node.rb +12 -10
  29. data/lib/packcr/node/reference_node.rb +11 -5
  30. data/lib/packcr/node/root_node.rb +1 -0
  31. data/lib/packcr/node/rule_node.rb +7 -4
  32. data/lib/packcr/node/sequence_node.rb +3 -1
  33. data/lib/packcr/node/string_node.rb +9 -6
  34. data/lib/packcr/node.rb +3 -5
  35. data/lib/packcr/parser.rb +4375 -4056
  36. data/lib/packcr/stream.rb +17 -12
  37. data/lib/packcr/templates/context/source.c.erb +187 -410
  38. data/lib/packcr/templates/context/source.rb.erb +91 -156
  39. data/lib/packcr/templates/node/action.c.erb +3 -3
  40. data/lib/packcr/templates/node/action.rb.erb +2 -2
  41. data/lib/packcr/templates/node/alternate.c.erb +8 -8
  42. data/lib/packcr/templates/node/alternate.rb.erb +4 -5
  43. data/lib/packcr/templates/node/capture.c.erb +6 -6
  44. data/lib/packcr/templates/node/capture.rb.erb +4 -4
  45. data/lib/packcr/templates/node/charclass.c.erb +12 -12
  46. data/lib/packcr/templates/node/charclass.rb.erb +6 -6
  47. data/lib/packcr/templates/node/charclass_any.c.erb +3 -3
  48. data/lib/packcr/templates/node/charclass_any.rb.erb +2 -2
  49. data/lib/packcr/templates/node/charclass_fail.c.erb +1 -1
  50. data/lib/packcr/templates/node/charclass_one.c.erb +8 -8
  51. data/lib/packcr/templates/node/charclass_one.rb.erb +6 -6
  52. data/lib/packcr/templates/node/charclass_utf8.c.erb +7 -7
  53. data/lib/packcr/templates/node/charclass_utf8.rb.erb +3 -3
  54. data/lib/packcr/templates/node/charclass_utf8_reverse.rb.erb +5 -5
  55. data/lib/packcr/templates/node/eof.c.erb +1 -1
  56. data/lib/packcr/templates/node/error.c.erb +7 -7
  57. data/lib/packcr/templates/node/error.rb.erb +2 -2
  58. data/lib/packcr/templates/node/expand.c.erb +5 -5
  59. data/lib/packcr/templates/node/expand.rb.erb +3 -3
  60. data/lib/packcr/templates/node/predicate.c.erb +10 -10
  61. data/lib/packcr/templates/node/predicate.rb.erb +6 -6
  62. data/lib/packcr/templates/node/predicate_neg.c.erb +8 -8
  63. data/lib/packcr/templates/node/predicate_neg.rb.erb +6 -6
  64. data/lib/packcr/templates/node/{quantify_many.c.erb → quantity_many.c.erb} +11 -11
  65. data/lib/packcr/templates/node/{quantify_many.rb.erb → quantity_many.rb.erb} +9 -9
  66. data/lib/packcr/templates/node/{quantify_one.c.erb → quantity_one.c.erb} +7 -7
  67. data/lib/packcr/templates/node/{quantify_one.rb.erb → quantity_one.rb.erb} +4 -4
  68. data/lib/packcr/templates/node/reference.c.erb +14 -2
  69. data/lib/packcr/templates/node/reference.rb.erb +16 -4
  70. data/lib/packcr/templates/node/reference_reverse.rb.erb +16 -4
  71. data/lib/packcr/templates/node/rule.c.erb +9 -2
  72. data/lib/packcr/templates/node/rule.rb.erb +26 -19
  73. data/lib/packcr/templates/node/string_many.c.erb +5 -5
  74. data/lib/packcr/templates/node/string_many.rb.erb +3 -3
  75. data/lib/packcr/templates/node/string_one.c.erb +4 -4
  76. data/lib/packcr/templates/node/string_one.rb.erb +3 -3
  77. data/lib/packcr/util.rb +21 -16
  78. data/lib/packcr/version.rb +1 -1
  79. data/lib/packcr.rb +8 -11
  80. metadata +37 -9
  81. data/lib/packcr/tokenizer.rb +0 -2948
@@ -1,23 +1,30 @@
1
- debug { warn "#{ " " * @level}EVAL <%= name %> #{answer.pos} #{@buffer[answer.pos..-1].inspect}" }
2
- @level += 1
3
- answer.resize_captures(<%= capts.length %>)
4
- <%- if vars.length > 0 -%>
5
- answer.values = {}
6
- <%- end -%>
7
- <%- r = expr.reachability -%>
8
- <%- if r == Packcr::CODE_REACH__ALWAYS_SUCCEED -%>
9
- <%- -%><%= gen.generate_code(expr, 0, 0, false) -%>
10
- @level -= 1
11
- debug { warn "#{ " " * @level}MATCH <%= name %> #{answer.pos} #{@buffer[answer.pos...@cur].inspect}" }
12
- return answer
13
- <%- else -%>
14
- catch(0) do
1
+ def evaluate_rule_<%= name %>(offset<% if gen.location %>, offset_loc<% end %>, limits: nil)
2
+ answer = ThunkChunk.new
3
+ answer.pos = @position_offset
4
+ <%- if gen.location -%>
5
+ answer.pos_loc = @position_offset_loc
6
+ <%- end -%>
7
+ debug { warn "#{ " " * @level}EVAL <%= name %> #{answer.pos} #{@buffer[answer.pos..-1].inspect}" }
8
+ @level += 1
9
+ answer.resize_captures(<%= capts.length %>)
10
+ <%- if vars.length > 0 -%>
11
+ answer.values = {}
12
+ <%- end -%>
13
+ <%- r = expr.reachability -%>
14
+ <%- if r == Packcr::CODE_REACH__ALWAYS_SUCCEED -%>
15
15
  <%- -%><%= gen.generate_code(expr, 0, 2, false) -%>
16
16
  @level -= 1
17
- debug { warn "#{ " " * @level}MATCH <%= name %> #{answer.pos} #{@buffer[answer.pos...@cur].inspect}" }
17
+ debug { warn "#{ " " * @level}MATCH <%= name %> #{answer.pos} #{@buffer[answer.pos...@position_offset].inspect}" }
18
18
  return answer
19
+ <%- else -%>
20
+ catch(0) do
21
+ <%- -%><%= gen.generate_code(expr, 0, 4, false) -%>
22
+ @level -= 1
23
+ debug { warn "#{ " " * @level}MATCH <%= name %> #{answer.pos} #{@buffer[answer.pos...@position_offset].inspect}" }
24
+ return answer
25
+ end
26
+ @level -= 1
27
+ debug { warn "#{ " " * @level}NOMATCH <%= name %> #{answer.pos} #{@buffer[answer.pos...@position_offset].inspect}" }
28
+ return nil
29
+ <%- end -%>
19
30
  end
20
- @level -= 1
21
- debug { warn "#{ " " * @level}NOMATCH <%= name %> #{answer.pos} #{@buffer[answer.pos...@cur].inspect}" }
22
- return nil
23
- <%- end -%>
@@ -1,11 +1,11 @@
1
1
  if (
2
2
  pcc_refill_buffer(ctx, <%= n %>) < <%= n %> ||
3
3
  <%- (n - 1).times do |i| -%>
4
- (ctx->buffer.buf + ctx->cur)[<%= i %>] != '<%= Packcr.escape_character(value[i]) %>' ||
4
+ (ctx->buffer.buf + ctx->position_offset)[<%= i %>] != '<%= Packcr.escape_character(value[i]) %>' ||
5
5
  <%- end -%>
6
- (ctx->buffer.buf + ctx->cur)[<%= n - 1 %>] != '<%= s = Packcr.escape_character(value[n - 1]) %>'
7
- ) goto L<%= "%04d" % onfail %>;
6
+ (ctx->buffer.buf + ctx->position_offset)[<%= n - 1 %>] != '<%= Packcr.escape_character(value[n - 1]) %>'
7
+ ) goto L<%= format("%04d", onfail) %>;
8
8
  <%- if gen.location -%>
9
- pcc_location_forward(&ctx->cur_loc, ctx->buffer.buf + ctx->cur, n);
9
+ pcc_location_forward(&ctx->position_offset_loc, ctx->buffer.buf + ctx->position_offset, n);
10
10
  <%- end -%>
11
- ctx->cur += <%= n %>;
11
+ ctx->position_offset += <%= n %>;
@@ -1,10 +1,10 @@
1
1
  if (
2
2
  refill_buffer(<%= n %>) < <%= n %> ||
3
- @buffer[@cur, <%= n %>] != <%= value[0, n].dump %>
3
+ @buffer[@position_offset, <%= n %>] != <%= value[0, n].dump %>
4
4
  )
5
5
  throw(<%= onfail %>)
6
6
  end
7
7
  <%- if gen.location -%>
8
- @cur_loc = @cur_loc.forward(@buffer, @cur, <%= n %>)
8
+ @position_offset_loc = @position_offset_loc.forward(@buffer, @position_offset, <%= n %>)
9
9
  <%- end -%>
10
- @cur += <%= n %>
10
+ @position_offset += <%= n %>
@@ -1,8 +1,8 @@
1
1
  if (
2
2
  pcc_refill_buffer(ctx, 1) < 1 ||
3
- ctx->buffer.buf[ctx->cur] != '<%= Packcr.escape_character(value[0]) %>'
4
- ) goto L<%= "%04d" % onfail %>;
3
+ ctx->buffer.buf[ctx->position_offset] != '<%= Packcr.escape_character(value[0]) %>'
4
+ ) goto L<%= format("%04d", onfail) %>;
5
5
  <%- if gen.location -%>
6
- pcc_location_forward(&ctx->cur_loc, ctx->buffer.buf + ctx->cur, 1);
6
+ pcc_location_forward(&ctx->position_offset_loc, ctx->buffer.buf + ctx->position_offset, 1);
7
7
  <%- end -%>
8
- ctx->cur++;
8
+ ctx->position_offset++;
@@ -1,10 +1,10 @@
1
1
  if (
2
2
  refill_buffer(1) < 1 ||
3
- @buffer[@cur] != "<%= Packcr.escape_character(value[0]) %>"
3
+ @buffer[@position_offset] != "<%= Packcr.escape_character(value[0]) %>"
4
4
  )
5
5
  throw(<%= onfail %>)
6
6
  end
7
7
  <%- if gen.location -%>
8
- @cur_loc = @cur_loc.forward(@buffer, @cur, 1)
8
+ @position_offset_loc = @position_offset_loc.forward(@buffer, @position_offset, 1)
9
9
  <%- end -%>
10
- @cur += 1
10
+ @position_offset += 1
data/lib/packcr/util.rb CHANGED
@@ -5,10 +5,10 @@ class Packcr
5
5
  def unescape_string(str, is_charclass)
6
6
  if is_charclass
7
7
  str.gsub!("\\" * 2) { "\\" * 4 }
8
- str.gsub!("\"" ) { "\\\"" }
8
+ str.gsub!("\"") { "\\\"" }
9
9
  end
10
10
  str.gsub!(/\\(.)/) do
11
- c = $1
11
+ c = ::Regexp.last_match(1)
12
12
  case c
13
13
  when "0"
14
14
  "\\x00"
@@ -19,7 +19,7 @@ class Packcr
19
19
  end
20
20
  end
21
21
  str.gsub!(/[^\x00-\x7f]/) do
22
- "\\x%02x" % $&.ord
22
+ format("\\x%02x", ::Regexp.last_match(0).ord)
23
23
  end
24
24
  str.replace "\"#{str}\"".undump
25
25
  end
@@ -31,19 +31,20 @@ class Packcr
31
31
  def escape_string(str)
32
32
  str = str.b
33
33
  str.gsub(/(\0+)|(\e+)|("+)|('+)|(\\+)|((?:(?![\0\e"'\\])[ -~])+)|([\x01-\x1a\x1c-\x1f\x7f-\xff]+)/n) do
34
- n = $&.size
35
- next "\\0" * n if $1
36
- next "\\x1b" * n if $2
37
- next "\\\"" * n if $3
38
- next "\\\'" * n if $4
39
- next "\\\\" * n if $5
40
- next $6 if $6
41
- $7.dump[1..-2].downcase
34
+ n = ::Regexp.last_match(0).size
35
+ next "\\0" * n if ::Regexp.last_match(1)
36
+ next "\\x1b" * n if ::Regexp.last_match(2)
37
+ next "\\\"" * n if ::Regexp.last_match(3)
38
+ next "\\'" * n if ::Regexp.last_match(4)
39
+ next "\\\\" * n if ::Regexp.last_match(5)
40
+ next ::Regexp.last_match(6) if ::Regexp.last_match(6)
41
+
42
+ ::Regexp.last_match(7).dump[1..-2].downcase
42
43
  end
43
44
  end
44
45
 
45
46
  def dump_integer_value(value)
46
- if value == nil
47
+ if value.nil?
47
48
  $stdout.print "void"
48
49
  else
49
50
  $stdout.print value
@@ -62,8 +63,8 @@ class Packcr
62
63
  offset = 0
63
64
  spaces.tr!("\v\f", " ")
64
65
  spaces.gsub!(/\t+/) do
65
- chars = $`.length
66
- o = 8 * $&.length - (offset + chars) % 8
66
+ chars = ::Regexp.last_match.pre_match.length
67
+ o = (8 * ::Regexp.last_match(0).length) - ((offset + chars) % 8)
67
68
  offset = (7 - chars) % 8
68
69
  " " * o
69
70
  end
@@ -75,15 +76,19 @@ class Packcr
75
76
  erb = ERB.new(File.read(template_path), trim_mode: "%-")
76
77
  erb.filename = template_path
77
78
  result = erb.result(b)
79
+ format_code(result, indent: indent, unwrap: unwrap)
80
+ end
81
+
82
+ def format_code(result, indent: 0, unwrap: false)
78
83
  if unwrap
79
84
  result.gsub!(/\A\{|\}\z/, "")
80
85
  indent -= 4
81
86
  end
82
87
  result.gsub!(/^(?!$)/, " " * indent)
83
- result.gsub!(/^( *?) {0,4}<<<</) { $1 }
88
+ result.gsub!(/^( *?) {0,4}<<<</) { ::Regexp.last_match(1) }
84
89
  result
85
90
  end
86
91
  end
87
92
 
88
93
  extend Util
89
- end
94
+ end
@@ -1,3 +1,3 @@
1
1
  class Packcr
2
- VERSION = "0.0.6"
2
+ VERSION = "0.0.7".freeze
3
3
  end
data/lib/packcr.rb CHANGED
@@ -1,14 +1,3 @@
1
- class Packcr
2
- end
3
-
4
- require "packcr/util"
5
- require "packcr/code_block"
6
- require "packcr/stream"
7
- require "packcr/generator"
8
- require "packcr/node"
9
- require "packcr/context"
10
- require "packcr/version"
11
-
12
1
  class Packcr
13
2
  CODE_REACH__BOTH = 0
14
3
  CODE_REACH__ALWAYS_SUCCEED = 1
@@ -30,3 +19,11 @@ class Packcr
30
19
  end
31
20
  end
32
21
  end
22
+
23
+ require "packcr/util"
24
+ require "packcr/code_block"
25
+ require "packcr/stream"
26
+ require "packcr/generator"
27
+ require "packcr/node"
28
+ require "packcr/context"
29
+ require "packcr/version"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: packcr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - wanabe
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-01-19 00:00:00.000000000 Z
11
+ date: 2023-01-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '1.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rubocop
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 1.43.0
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 1.43.0
55
69
  description:
56
70
  email:
57
71
  executables:
@@ -65,6 +79,20 @@ files:
65
79
  - lib/packcr/cli.rb
66
80
  - lib/packcr/code_block.rb
67
81
  - lib/packcr/context.rb
82
+ - lib/packcr/generated/context.rb
83
+ - lib/packcr/generated/node/action_node.rb
84
+ - lib/packcr/generated/node/alternate_node.rb
85
+ - lib/packcr/generated/node/capture_node.rb
86
+ - lib/packcr/generated/node/charclass_node.rb
87
+ - lib/packcr/generated/node/eof_node.rb
88
+ - lib/packcr/generated/node/error_node.rb
89
+ - lib/packcr/generated/node/expand_node.rb
90
+ - lib/packcr/generated/node/predicate_node.rb
91
+ - lib/packcr/generated/node/quantity_node.rb
92
+ - lib/packcr/generated/node/reference_node.rb
93
+ - lib/packcr/generated/node/rule_node.rb
94
+ - lib/packcr/generated/node/sequence_node.rb
95
+ - lib/packcr/generated/node/string_node.rb
68
96
  - lib/packcr/generator.rb
69
97
  - lib/packcr/node.rb
70
98
  - lib/packcr/node/action_node.rb
@@ -113,10 +141,10 @@ files:
113
141
  - lib/packcr/templates/node/predicate.rb.erb
114
142
  - lib/packcr/templates/node/predicate_neg.c.erb
115
143
  - lib/packcr/templates/node/predicate_neg.rb.erb
116
- - lib/packcr/templates/node/quantify_many.c.erb
117
- - lib/packcr/templates/node/quantify_many.rb.erb
118
- - lib/packcr/templates/node/quantify_one.c.erb
119
- - lib/packcr/templates/node/quantify_one.rb.erb
144
+ - lib/packcr/templates/node/quantity_many.c.erb
145
+ - lib/packcr/templates/node/quantity_many.rb.erb
146
+ - lib/packcr/templates/node/quantity_one.c.erb
147
+ - lib/packcr/templates/node/quantity_one.rb.erb
120
148
  - lib/packcr/templates/node/reference.c.erb
121
149
  - lib/packcr/templates/node/reference.rb.erb
122
150
  - lib/packcr/templates/node/reference_reverse.rb.erb
@@ -128,13 +156,13 @@ files:
128
156
  - lib/packcr/templates/node/string_many.rb.erb
129
157
  - lib/packcr/templates/node/string_one.c.erb
130
158
  - lib/packcr/templates/node/string_one.rb.erb
131
- - lib/packcr/tokenizer.rb
132
159
  - lib/packcr/util.rb
133
160
  - lib/packcr/version.rb
134
161
  homepage: https://github.com/wanabe/packcr
135
162
  licenses:
136
163
  - MIT
137
- metadata: {}
164
+ metadata:
165
+ rubygems_mfa_required: 'true'
138
166
  post_install_message:
139
167
  rdoc_options: []
140
168
  require_paths:
@@ -143,7 +171,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
143
171
  requirements:
144
172
  - - ">="
145
173
  - !ruby/object:Gem::Version
146
- version: '0'
174
+ version: 2.7.0
147
175
  required_rubygems_version: !ruby/object:Gem::Requirement
148
176
  requirements:
149
177
  - - ">="