packcr 0.0.4 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (88) hide show
  1. checksums.yaml +4 -4
  2. data/exe/packcr +3 -0
  3. data/lib/packcr/broadcast.rb +17 -0
  4. data/lib/packcr/cli.rb +27 -0
  5. data/lib/packcr/code_block.rb +2 -4
  6. data/lib/packcr/context.rb +66 -61
  7. data/lib/packcr/generated/context.rb +440 -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 +167 -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 +14 -11
  22. data/lib/packcr/node/action_node.rb +18 -7
  23. data/lib/packcr/node/alternate_node.rb +22 -12
  24. data/lib/packcr/node/capture_node.rb +14 -12
  25. data/lib/packcr/node/charclass_node.rb +44 -24
  26. data/lib/packcr/node/eof_node.rb +25 -0
  27. data/lib/packcr/node/error_node.rb +20 -13
  28. data/lib/packcr/node/expand_node.rb +18 -9
  29. data/lib/packcr/node/predicate_node.rb +19 -26
  30. data/lib/packcr/node/quantity_node.rb +31 -24
  31. data/lib/packcr/node/reference_node.rb +31 -9
  32. data/lib/packcr/node/root_node.rb +61 -0
  33. data/lib/packcr/node/rule_node.rb +29 -3
  34. data/lib/packcr/node/sequence_node.rb +48 -31
  35. data/lib/packcr/node/string_node.rb +19 -16
  36. data/lib/packcr/node.rb +34 -5
  37. data/lib/packcr/parser.rb +4493 -3896
  38. data/lib/packcr/stream.rb +22 -22
  39. data/lib/packcr/templates/context/header.c.erb +29 -0
  40. data/lib/packcr/templates/context/source.c.erb +1069 -0
  41. data/lib/packcr/templates/context/source.rb.erb +341 -0
  42. data/lib/packcr/templates/node/action.c.erb +16 -0
  43. data/lib/packcr/templates/node/action.rb.erb +21 -0
  44. data/lib/packcr/templates/node/alternate.c.erb +34 -0
  45. data/lib/packcr/templates/node/alternate.rb.erb +39 -0
  46. data/lib/packcr/templates/node/capture.c.erb +17 -0
  47. data/lib/packcr/templates/node/capture.rb.erb +14 -0
  48. data/lib/packcr/templates/node/charclass.c.erb +47 -0
  49. data/lib/packcr/templates/node/charclass.rb.erb +49 -0
  50. data/lib/packcr/templates/node/charclass_any.c.erb +5 -0
  51. data/lib/packcr/templates/node/charclass_any.rb.erb +7 -0
  52. data/lib/packcr/templates/node/charclass_fail.c.erb +1 -0
  53. data/lib/packcr/templates/node/charclass_fail.rb.erb +1 -0
  54. data/lib/packcr/templates/node/charclass_one.c.erb +19 -0
  55. data/lib/packcr/templates/node/charclass_one.rb.erb +23 -0
  56. data/lib/packcr/templates/node/charclass_utf8.c.erb +49 -0
  57. data/lib/packcr/templates/node/charclass_utf8.rb.erb +50 -0
  58. data/lib/packcr/templates/node/charclass_utf8_reverse.rb.erb +51 -0
  59. data/lib/packcr/templates/node/eof.c.erb +1 -0
  60. data/lib/packcr/templates/node/eof.rb.erb +3 -0
  61. data/lib/packcr/templates/node/error.c.erb +28 -0
  62. data/lib/packcr/templates/node/error.rb.erb +34 -0
  63. data/lib/packcr/templates/node/expand.c.erb +16 -0
  64. data/lib/packcr/templates/node/expand.rb.erb +16 -0
  65. data/lib/packcr/templates/node/predicate.c.erb +30 -0
  66. data/lib/packcr/templates/node/predicate.rb.erb +28 -0
  67. data/lib/packcr/templates/node/predicate_neg.c.erb +23 -0
  68. data/lib/packcr/templates/node/predicate_neg.rb.erb +22 -0
  69. data/lib/packcr/templates/node/quantity_many.c.erb +45 -0
  70. data/lib/packcr/templates/node/quantity_many.rb.erb +47 -0
  71. data/lib/packcr/templates/node/quantity_one.c.erb +21 -0
  72. data/lib/packcr/templates/node/quantity_one.rb.erb +23 -0
  73. data/lib/packcr/templates/node/reference.c.erb +17 -0
  74. data/lib/packcr/templates/node/reference.rb.erb +21 -0
  75. data/lib/packcr/templates/node/reference_reverse.rb.erb +21 -0
  76. data/lib/packcr/templates/node/rule.c.erb +26 -0
  77. data/lib/packcr/templates/node/rule.rb.erb +30 -0
  78. data/lib/packcr/templates/node/sequence.c.erb +12 -0
  79. data/lib/packcr/templates/node/sequence.rb.erb +12 -0
  80. data/lib/packcr/templates/node/string_many.c.erb +11 -0
  81. data/lib/packcr/templates/node/string_many.rb.erb +10 -0
  82. data/lib/packcr/templates/node/string_one.c.erb +8 -0
  83. data/lib/packcr/templates/node/string_one.rb.erb +10 -0
  84. data/lib/packcr/util.rb +21 -24
  85. data/lib/packcr/version.rb +1 -1
  86. data/lib/packcr.rb +9 -13
  87. metadata +117 -10
  88. data/lib/packcr/buffer.rb +0 -47
data/lib/packcr/stream.rb CHANGED
@@ -1,10 +1,9 @@
1
1
  require "securerandom"
2
- require "stringio"
3
2
 
4
3
  class Packcr
5
4
  class Stream
6
- def initialize(io, name, line)
7
- @io = io
5
+ def initialize(stream, name, line)
6
+ @stream = stream
8
7
  @name = name
9
8
  @line = line
10
9
  @line_directive_tag = nil
@@ -12,13 +11,13 @@ class Packcr
12
11
 
13
12
  def write(s, rewrite_line_directive: false)
14
13
  if rewrite_line_directive && @line_directive_tag && @line.respond_to?(:+)
15
- s.gsub!(@line_directive_tag) { (@line + $`.count("\n") + 1).to_s }
14
+ s.gsub!(@line_directive_tag) { (@line + ::Regexp.last_match.pre_match.count("\n") + 1).to_s }
16
15
  @line_directive_tag = nil
17
16
  end
18
- @io.write(s)
19
- if @line.respond_to?(:+)
20
- @line += s.count("\n")
21
- end
17
+ @stream << s
18
+ return unless @line.respond_to?(:+)
19
+
20
+ @line += s.count("\n")
22
21
  end
23
22
 
24
23
  def write_text(s)
@@ -27,6 +26,7 @@ class Packcr
27
26
 
28
27
  def write_line_directive(fname, lineno)
29
28
  return unless @line
29
+
30
30
  if lineno.respond_to?(:+)
31
31
  write("#line #{lineno + 1} \"")
32
32
  else
@@ -45,22 +45,18 @@ class Packcr
45
45
  def write_code_block(code, indent, fname)
46
46
  text = code.text
47
47
  ptr = text.b
48
- len = code.len
49
48
  lineno = code.line
50
- if len == nil
51
- return # for safety
52
- end
53
49
 
54
50
  ptr.sub!(/\A\n+/) do
55
- lineno += $&.length
51
+ lineno += ::Regexp.last_match(0).length
56
52
  ""
57
53
  end
58
54
  ptr.sub!(/[ \v\f\t\r\n]*\z/, "")
59
55
 
60
56
  min_indent_spaces = nil
61
57
  ptr.gsub!(/^([ \v\f\t]*)([^ \v\f\t\r\n])/) do
62
- spaces = $1
63
- char = $2
58
+ spaces = ::Regexp.last_match(1)
59
+ char = ::Regexp.last_match(2)
64
60
 
65
61
  next char if char == "#"
66
62
 
@@ -76,7 +72,7 @@ class Packcr
76
72
  if min_indent_spaces
77
73
  indent_spaces = " " * indent
78
74
  ptr.gsub!(/^#{min_indent_spaces}( *[^\n#])/) do
79
- "#{indent_spaces}#{$1}"
75
+ "#{indent_spaces}#{::Regexp.last_match(1)}"
80
76
  end
81
77
  end
82
78
 
@@ -84,19 +80,23 @@ class Packcr
84
80
 
85
81
  write_line_directive(fname, lineno)
86
82
  ptr.scan(/^(.+?)[ \v\f\t\r]*$|^\r?\n/) do
87
- write $1 if $1
83
+ write ::Regexp.last_match(1) if ::Regexp.last_match(1)
88
84
  write "\n"
89
85
  end
90
86
  write_output_line_directive
91
87
  end
92
88
 
93
89
  def get_code_block(code, indent, fname)
94
- buf = StringIO.new
95
- line, io, @io, @line = @line, @io, buf, @line && :uuid
90
+ buf = +""
91
+ line = @line
92
+ stream = @stream
93
+ @stream = buf
94
+ @line &&= :uuid
96
95
  write_code_block(code, indent, fname)
97
- return buf.string
96
+ buf
98
97
  ensure
99
- @line, @io = line, io
98
+ @line = line
99
+ @stream = stream
100
100
  end
101
101
  end
102
- end
102
+ end
@@ -0,0 +1,29 @@
1
+ /* A packrat parser generated by PackCR <%= Packcr::VERSION %> */
2
+
3
+ <%- code(:eheader).each do |code| -%>
4
+ <%= stream.get_code_block(code, 0, @iname) -%>
5
+ <%- end -%>
6
+ <%- if !code(:eheader).empty? -%>
7
+
8
+ <%- end -%>
9
+ #ifndef PCC_INCLUDED_<%= @hid %>
10
+ #define PCC_INCLUDED_<%= @hid %>
11
+
12
+ <%- code(:header).each do |code| -%>
13
+ <%= stream.get_code_block(code, 0, @iname) -%>
14
+ <%- end -%>
15
+ #ifdef __cplusplus
16
+ extern "C" {
17
+ #endif
18
+
19
+ typedef struct <%= prefix %>_context_tag <%= prefix %>_context_t;
20
+
21
+ <%= prefix %>_context_t *<%= prefix %>_create(<%= auxil_def %>auxil);
22
+ int <%= prefix %>_parse(<%= prefix %>_context_t *ctx, <%= value_def %>*ret);
23
+ void <%= prefix %>_destroy(<%= prefix %>_context_t *ctx);
24
+
25
+ #ifdef __cplusplus
26
+ }
27
+ #endif
28
+
29
+ #endif /* !PCC_INCLUDED_<%= @hid %> */