packcr 0.0.4 → 0.0.6

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 (75) 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 +25 -0
  5. data/lib/packcr/code_block.rb +2 -3
  6. data/lib/packcr/context.rb +59 -56
  7. data/lib/packcr/generator.rb +13 -11
  8. data/lib/packcr/node/action_node.rb +14 -5
  9. data/lib/packcr/node/alternate_node.rb +20 -12
  10. data/lib/packcr/node/capture_node.rb +11 -11
  11. data/lib/packcr/node/charclass_node.rb +37 -13
  12. data/lib/packcr/node/eof_node.rb +23 -0
  13. data/lib/packcr/node/error_node.rb +17 -12
  14. data/lib/packcr/node/expand_node.rb +11 -5
  15. data/lib/packcr/node/predicate_node.rb +15 -24
  16. data/lib/packcr/node/quantity_node.rb +23 -18
  17. data/lib/packcr/node/reference_node.rb +21 -5
  18. data/lib/packcr/node/root_node.rb +60 -0
  19. data/lib/packcr/node/rule_node.rb +26 -3
  20. data/lib/packcr/node/sequence_node.rb +46 -31
  21. data/lib/packcr/node/string_node.rb +12 -12
  22. data/lib/packcr/node.rb +35 -4
  23. data/lib/packcr/parser.rb +2939 -2661
  24. data/lib/packcr/stream.rb +8 -13
  25. data/lib/packcr/templates/context/header.c.erb +29 -0
  26. data/lib/packcr/templates/context/source.c.erb +1292 -0
  27. data/lib/packcr/templates/context/source.rb.erb +406 -0
  28. data/lib/packcr/templates/node/action.c.erb +16 -0
  29. data/lib/packcr/templates/node/action.rb.erb +21 -0
  30. data/lib/packcr/templates/node/alternate.c.erb +34 -0
  31. data/lib/packcr/templates/node/alternate.rb.erb +40 -0
  32. data/lib/packcr/templates/node/capture.c.erb +17 -0
  33. data/lib/packcr/templates/node/capture.rb.erb +14 -0
  34. data/lib/packcr/templates/node/charclass.c.erb +47 -0
  35. data/lib/packcr/templates/node/charclass.rb.erb +49 -0
  36. data/lib/packcr/templates/node/charclass_any.c.erb +5 -0
  37. data/lib/packcr/templates/node/charclass_any.rb.erb +7 -0
  38. data/lib/packcr/templates/node/charclass_fail.c.erb +1 -0
  39. data/lib/packcr/templates/node/charclass_fail.rb.erb +1 -0
  40. data/lib/packcr/templates/node/charclass_one.c.erb +19 -0
  41. data/lib/packcr/templates/node/charclass_one.rb.erb +23 -0
  42. data/lib/packcr/templates/node/charclass_utf8.c.erb +49 -0
  43. data/lib/packcr/templates/node/charclass_utf8.rb.erb +50 -0
  44. data/lib/packcr/templates/node/charclass_utf8_reverse.rb.erb +51 -0
  45. data/lib/packcr/templates/node/eof.c.erb +1 -0
  46. data/lib/packcr/templates/node/eof.rb.erb +3 -0
  47. data/lib/packcr/templates/node/error.c.erb +28 -0
  48. data/lib/packcr/templates/node/error.rb.erb +34 -0
  49. data/lib/packcr/templates/node/expand.c.erb +16 -0
  50. data/lib/packcr/templates/node/expand.rb.erb +16 -0
  51. data/lib/packcr/templates/node/predicate.c.erb +30 -0
  52. data/lib/packcr/templates/node/predicate.rb.erb +28 -0
  53. data/lib/packcr/templates/node/predicate_neg.c.erb +23 -0
  54. data/lib/packcr/templates/node/predicate_neg.rb.erb +22 -0
  55. data/lib/packcr/templates/node/quantify_many.c.erb +45 -0
  56. data/lib/packcr/templates/node/quantify_many.rb.erb +47 -0
  57. data/lib/packcr/templates/node/quantify_one.c.erb +21 -0
  58. data/lib/packcr/templates/node/quantify_one.rb.erb +23 -0
  59. data/lib/packcr/templates/node/reference.c.erb +5 -0
  60. data/lib/packcr/templates/node/reference.rb.erb +9 -0
  61. data/lib/packcr/templates/node/reference_reverse.rb.erb +9 -0
  62. data/lib/packcr/templates/node/rule.c.erb +19 -0
  63. data/lib/packcr/templates/node/rule.rb.erb +23 -0
  64. data/lib/packcr/templates/node/sequence.c.erb +12 -0
  65. data/lib/packcr/templates/node/sequence.rb.erb +12 -0
  66. data/lib/packcr/templates/node/string_many.c.erb +11 -0
  67. data/lib/packcr/templates/node/string_many.rb.erb +10 -0
  68. data/lib/packcr/templates/node/string_one.c.erb +8 -0
  69. data/lib/packcr/templates/node/string_one.rb.erb +10 -0
  70. data/lib/packcr/tokenizer.rb +2948 -0
  71. data/lib/packcr/util.rb +0 -8
  72. data/lib/packcr/version.rb +1 -1
  73. data/lib/packcr.rb +1 -2
  74. metadata +87 -8
  75. 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
@@ -15,7 +14,7 @@ class Packcr
15
14
  s.gsub!(@line_directive_tag) { (@line + $`.count("\n") + 1).to_s }
16
15
  @line_directive_tag = nil
17
16
  end
18
- @io.write(s)
17
+ @stream << s
19
18
  if @line.respond_to?(:+)
20
19
  @line += s.count("\n")
21
20
  end
@@ -45,11 +44,7 @@ class Packcr
45
44
  def write_code_block(code, indent, fname)
46
45
  text = code.text
47
46
  ptr = text.b
48
- len = code.len
49
47
  lineno = code.line
50
- if len == nil
51
- return # for safety
52
- end
53
48
 
54
49
  ptr.sub!(/\A\n+/) do
55
50
  lineno += $&.length
@@ -91,12 +86,12 @@ class Packcr
91
86
  end
92
87
 
93
88
  def get_code_block(code, indent, fname)
94
- buf = StringIO.new
95
- line, io, @io, @line = @line, @io, buf, @line && :uuid
89
+ buf = +""
90
+ line, stream, @stream, @line = @line, @stream, buf, @line && :uuid
96
91
  write_code_block(code, indent, fname)
97
- return buf.string
92
+ return buf
98
93
  ensure
99
- @line, @io = line, io
94
+ @line, @stream = line, stream
100
95
  end
101
96
  end
102
- end
97
+ 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 %> */