packcr 0.0.8 → 0.1.1
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.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/lib/packcr/context.rb +14 -5
- data/lib/packcr/generated/context.rb +184 -85
- data/lib/packcr/generated/node/action_node.rb +16 -1
- data/lib/packcr/generated/node/alternate_node.rb +47 -7
- data/lib/packcr/generated/node/capture_node.rb +16 -1
- data/lib/packcr/generated/node/charclass_node.rb +73 -6
- data/lib/packcr/generated/node/eof_node.rb +8 -1
- data/lib/packcr/generated/node/error_node.rb +8 -1
- data/lib/packcr/generated/node/expand_node.rb +8 -1
- data/lib/packcr/generated/node/predicate_node.rb +37 -2
- data/lib/packcr/generated/node/quantity_node.rb +56 -2
- data/lib/packcr/generated/node/reference_node.rb +11 -2
- data/lib/packcr/generated/node/rule_node.rb +32 -1
- data/lib/packcr/generated/node/sequence_node.rb +19 -1
- data/lib/packcr/generated/node/string_node.rb +50 -2
- data/lib/packcr/generator.rb +4 -3
- data/lib/packcr/node/action_node.rb +2 -2
- data/lib/packcr/node/alternate_node.rb +2 -2
- data/lib/packcr/node/capture_node.rb +2 -2
- data/lib/packcr/node/charclass_node.rb +15 -15
- data/lib/packcr/node/eof_node.rb +2 -2
- data/lib/packcr/node/error_node.rb +2 -2
- data/lib/packcr/node/expand_node.rb +2 -2
- data/lib/packcr/node/predicate_node.rb +3 -3
- data/lib/packcr/node/quantity_node.rb +4 -4
- data/lib/packcr/node/reference_node.rb +5 -4
- data/lib/packcr/node/rule_node.rb +4 -3
- data/lib/packcr/node/sequence_node.rb +2 -2
- data/lib/packcr/node/string_node.rb +17 -3
- data/lib/packcr/parser.rb +403 -254
- data/lib/packcr/stream.rb +1 -1
- data/lib/packcr/templates/context/source.c.erb +30 -26
- data/lib/packcr/templates/context/source.rb.erb +160 -159
- data/lib/packcr/templates/context/source.rs.erb +627 -0
- data/lib/packcr/templates/node/action.rs.erb +6 -0
- data/lib/packcr/templates/node/alternate.rs.erb +38 -0
- data/lib/packcr/templates/node/capture.rs.erb +13 -0
- data/lib/packcr/templates/node/charclass_utf8.rs.erb +41 -0
- data/lib/packcr/templates/node/predicate_neg.rs.erb +24 -0
- data/lib/packcr/templates/node/quantity_many.rs.erb +77 -0
- data/lib/packcr/templates/node/reference.rs.erb +3 -0
- data/lib/packcr/templates/node/rule.rs.erb +43 -0
- data/lib/packcr/templates/node/sequence.rs.erb +12 -0
- data/lib/packcr/templates/node/string_many.rs.erb +10 -0
- data/lib/packcr/templates/node/string_many_reverse.rs.erb +7 -0
- data/lib/packcr/templates/node/string_one.rs.erb +9 -0
- data/lib/packcr/templates/node/string_one_reverse.rs.erb +6 -0
- data/lib/packcr/util.rb +9 -0
- data/lib/packcr/version.rb +1 -1
- metadata +20 -67
@@ -17,16 +17,16 @@ class Packcr
|
|
17
17
|
gen.lang == :rb && !gen.ascii
|
18
18
|
end
|
19
19
|
|
20
|
-
def generate_code(gen, onfail, indent,
|
21
|
-
return generate_ascii_code(gen, onfail, indent,
|
20
|
+
def generate_code(gen, onfail, indent, unwrap, oncut: nil)
|
21
|
+
return generate_ascii_code(gen, onfail, indent, unwrap) if gen.ascii
|
22
22
|
|
23
|
-
generate_utf8_charclass_code(gen, onfail, indent,
|
23
|
+
generate_utf8_charclass_code(gen, onfail, indent, unwrap)
|
24
24
|
end
|
25
25
|
|
26
|
-
def generate_reverse_code(gen, onsuccess, indent,
|
26
|
+
def generate_reverse_code(gen, onsuccess, indent, unwrap, oncut: nil)
|
27
27
|
raise "unexpected" if gen.ascii
|
28
28
|
|
29
|
-
generate_utf8_charclass_reverse_code(gen, onsuccess, indent,
|
29
|
+
generate_utf8_charclass_reverse_code(gen, onsuccess, indent, unwrap)
|
30
30
|
end
|
31
31
|
|
32
32
|
def reachability
|
@@ -39,20 +39,20 @@ class Packcr
|
|
39
39
|
|
40
40
|
private
|
41
41
|
|
42
|
-
def generate_utf8_charclass_code(gen, onfail, indent,
|
42
|
+
def generate_utf8_charclass_code(gen, onfail, indent, unwrap)
|
43
43
|
charclass = value
|
44
44
|
if charclass && charclass.encoding != Encoding::UTF_8
|
45
45
|
charclass = charclass.dup.force_encoding(Encoding::UTF_8)
|
46
46
|
end
|
47
47
|
n = charclass&.length || 0
|
48
48
|
if charclass.nil? || n > 0
|
49
|
-
|
49
|
+
get_utf8_code(gen, onfail, indent, unwrap, charclass, n)
|
50
50
|
else
|
51
|
-
|
51
|
+
get_fail_code(gen, onfail, indent, unwrap)
|
52
52
|
end
|
53
53
|
end
|
54
54
|
|
55
|
-
def generate_utf8_charclass_reverse_code(gen, onsuccess, indent,
|
55
|
+
def generate_utf8_charclass_reverse_code(gen, onsuccess, indent, unwrap)
|
56
56
|
charclass = value
|
57
57
|
if charclass && charclass.encoding != Encoding::UTF_8
|
58
58
|
charclass = charclass.dup.force_encoding(Encoding::UTF_8)
|
@@ -60,10 +60,10 @@ class Packcr
|
|
60
60
|
n = charclass&.length || 0
|
61
61
|
return unless charclass.nil? || n > 0
|
62
62
|
|
63
|
-
|
63
|
+
get_utf8_reverse_code(gen, onsuccess, indent, unwrap, charclass, n)
|
64
64
|
end
|
65
65
|
|
66
|
-
def generate_ascii_code(gen, onfail, indent,
|
66
|
+
def generate_ascii_code(gen, onfail, indent, unwrap)
|
67
67
|
charclass = value
|
68
68
|
if charclass
|
69
69
|
n = charclass.length
|
@@ -74,15 +74,15 @@ class Packcr
|
|
74
74
|
end
|
75
75
|
if n > 0
|
76
76
|
if n > 1
|
77
|
-
|
77
|
+
get_code(gen, onfail, indent, unwrap, charclass, n, a)
|
78
78
|
else
|
79
|
-
|
79
|
+
get_one_code(gen, onfail, indent, unwrap, charclass, n, a)
|
80
80
|
end
|
81
81
|
else
|
82
|
-
|
82
|
+
get_fail_code(gen, onfail, indent, unwrap)
|
83
83
|
end
|
84
84
|
else
|
85
|
-
|
85
|
+
get_any_code(gen, onfail, indent, unwrap, charclass)
|
86
86
|
end
|
87
87
|
end
|
88
88
|
|
data/lib/packcr/node/eof_node.rb
CHANGED
@@ -5,8 +5,8 @@ class Packcr
|
|
5
5
|
$stdout.print "#{" " * indent}Eof()\n"
|
6
6
|
end
|
7
7
|
|
8
|
-
def generate_code(gen, onfail, indent,
|
9
|
-
|
8
|
+
def generate_code(gen, onfail, indent, unwrap, oncut: nil)
|
9
|
+
get_code(gen, onfail, indent, unwrap, oncut)
|
10
10
|
end
|
11
11
|
|
12
12
|
def reachability
|
@@ -29,8 +29,8 @@ class Packcr
|
|
29
29
|
$stdout.print "#{" " * indent}}\n"
|
30
30
|
end
|
31
31
|
|
32
|
-
def generate_code(gen, onfail, indent,
|
33
|
-
|
32
|
+
def generate_code(gen, onfail, indent, unwrap, oncut: nil)
|
33
|
+
get_code(gen, onfail, indent, unwrap, oncut)
|
34
34
|
end
|
35
35
|
|
36
36
|
def reachability
|
@@ -15,8 +15,8 @@ class Packcr
|
|
15
15
|
$stdout.print ")\n"
|
16
16
|
end
|
17
17
|
|
18
|
-
def generate_code(gen, onfail, indent,
|
19
|
-
|
18
|
+
def generate_code(gen, onfail, indent, unwrap, oncut: nil)
|
19
|
+
get_code(gen, onfail, indent, unwrap, oncut)
|
20
20
|
end
|
21
21
|
|
22
22
|
def reachability
|
@@ -15,11 +15,11 @@ class Packcr
|
|
15
15
|
$stdout.print "#{" " * indent}}\n"
|
16
16
|
end
|
17
17
|
|
18
|
-
def generate_code(gen, onfail, indent,
|
18
|
+
def generate_code(gen, onfail, indent, unwrap, oncut: nil)
|
19
19
|
if neg
|
20
|
-
|
20
|
+
get_neg_code(gen, onfail, indent, unwrap, oncut)
|
21
21
|
else
|
22
|
-
|
22
|
+
get_code(gen, onfail, indent, unwrap, oncut)
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
@@ -16,14 +16,14 @@ class Packcr
|
|
16
16
|
$stdout.print "#{" " * indent}}\n"
|
17
17
|
end
|
18
18
|
|
19
|
-
def generate_code(gen, onfail, indent,
|
19
|
+
def generate_code(gen, onfail, indent, unwrap, oncut: nil)
|
20
20
|
if max > 1 || max < 0
|
21
|
-
|
21
|
+
get_many_code(gen, onfail, indent, unwrap, oncut)
|
22
22
|
elsif max == 1
|
23
23
|
if min > 0
|
24
|
-
gen.
|
24
|
+
gen.generate_code(expr, onfail, indent, unwrap, oncut: oncut)
|
25
25
|
else
|
26
|
-
|
26
|
+
get_one_code(gen, onfail, indent, unwrap, oncut)
|
27
27
|
end
|
28
28
|
end
|
29
29
|
end
|
@@ -20,12 +20,12 @@ class Packcr
|
|
20
20
|
gen.lang == :rb
|
21
21
|
end
|
22
22
|
|
23
|
-
def generate_code(gen, onfail, indent,
|
24
|
-
|
23
|
+
def generate_code(gen, onfail, indent, unwrap, oncut: nil)
|
24
|
+
get_code(gen, onfail, indent, unwrap, oncut)
|
25
25
|
end
|
26
26
|
|
27
|
-
def generate_reverse_code(gen, onsuccess, indent,
|
28
|
-
|
27
|
+
def generate_reverse_code(gen, onsuccess, indent, unwrap, oncut: nil)
|
28
|
+
get_reverse_code(gen, onsuccess, indent, unwrap, oncut)
|
29
29
|
end
|
30
30
|
|
31
31
|
def reachability
|
@@ -33,6 +33,7 @@ class Packcr
|
|
33
33
|
end
|
34
34
|
|
35
35
|
def setup_rule(rule)
|
36
|
+
rule.has_ref = true
|
36
37
|
return unless var
|
37
38
|
|
38
39
|
i = rule.vars.index do |ref|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
class Packcr
|
2
2
|
class Node
|
3
3
|
class RuleNode < Packcr::Node
|
4
|
-
attr_accessor :codes, :name, :expr, :ref, :vars, :capts, :line, :col, :top
|
4
|
+
attr_accessor :codes, :name, :expr, :ref, :vars, :capts, :line, :col, :top, :has_ref
|
5
5
|
|
6
6
|
def initialize(expr = nil, name = nil, line = nil, col = nil)
|
7
7
|
super()
|
@@ -13,6 +13,7 @@ class Packcr
|
|
13
13
|
@name = name
|
14
14
|
@line = line
|
15
15
|
@col = col
|
16
|
+
@has_ref = false
|
16
17
|
end
|
17
18
|
|
18
19
|
def debug_dump(indent = 0)
|
@@ -21,8 +22,8 @@ class Packcr
|
|
21
22
|
$stdout.print "#{" " * indent}}\n"
|
22
23
|
end
|
23
24
|
|
24
|
-
def generate_code(gen, onfail, indent,
|
25
|
-
|
25
|
+
def generate_code(gen, onfail, indent, unwrap, oncut: nil)
|
26
|
+
get_code(gen, onfail, indent, unwrap, oncut)
|
26
27
|
end
|
27
28
|
|
28
29
|
def reachability
|
@@ -53,8 +53,8 @@ class Packcr
|
|
53
53
|
m
|
54
54
|
end
|
55
55
|
|
56
|
-
def generate_code(gen, onfail, indent,
|
57
|
-
|
56
|
+
def generate_code(gen, onfail, indent, unwrap, oncut: nil)
|
57
|
+
get_code(gen, onfail, indent, unwrap, oncut)
|
58
58
|
end
|
59
59
|
|
60
60
|
def reachability
|
@@ -17,14 +17,28 @@ class Packcr
|
|
17
17
|
$stdout.print "')\n"
|
18
18
|
end
|
19
19
|
|
20
|
-
def
|
20
|
+
def reversible?(gen)
|
21
|
+
gen.lang == :rs
|
22
|
+
end
|
23
|
+
|
24
|
+
def generate_code(gen, onfail, indent, unwrap, oncut: nil)
|
21
25
|
n = value&.length || 0
|
22
26
|
return unless n > 0
|
23
27
|
|
24
28
|
if n > 1
|
25
|
-
|
29
|
+
get_many_code(gen, onfail, indent, unwrap, oncut, n)
|
30
|
+
else
|
31
|
+
get_one_code(gen, onfail, indent, unwrap, oncut, n)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def generate_reverse_code(gen, onsuccess, indent, unwrap, oncut: nil)
|
36
|
+
n = value&.length || 0
|
37
|
+
|
38
|
+
if n > 1
|
39
|
+
get_many_reverse_code(gen, onsuccess, indent, unwrap, oncut, n)
|
26
40
|
else
|
27
|
-
|
41
|
+
get_one_reverse_code(gen, onsuccess, indent, unwrap, oncut, n)
|
28
42
|
end
|
29
43
|
end
|
30
44
|
|