regextest 0.1.2
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 +7 -0
- data/.gitignore +11 -0
- data/.rspec +2 -0
- data/.travis.yml +3 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +25 -0
- data/README.md +88 -0
- data/Rakefile +55 -0
- data/bin/console +14 -0
- data/bin/regextest +4 -0
- data/bin/setup +7 -0
- data/contrib/Onigmo/RE.txt +522 -0
- data/contrib/Onigmo/UnicodeProps.txt +728 -0
- data/contrib/Onigmo/testpy.py +1319 -0
- data/contrib/unicode/Blocks.txt +298 -0
- data/contrib/unicode/CaseFolding.txt +1414 -0
- data/contrib/unicode/DerivedAge.txt +1538 -0
- data/contrib/unicode/DerivedCoreProperties.txt +11029 -0
- data/contrib/unicode/PropList.txt +1525 -0
- data/contrib/unicode/PropertyAliases.txt +193 -0
- data/contrib/unicode/PropertyValueAliases.txt +1420 -0
- data/contrib/unicode/README.txt +25 -0
- data/contrib/unicode/Scripts.txt +2539 -0
- data/contrib/unicode/UnicodeData.txt +29215 -0
- data/lib/pre-case-folding.rb +101 -0
- data/lib/pre-posix-char-class.rb +150 -0
- data/lib/pre-unicode.rb +116 -0
- data/lib/regextest.rb +268 -0
- data/lib/regextest/back.rb +58 -0
- data/lib/regextest/back/element.rb +151 -0
- data/lib/regextest/back/main.rb +356 -0
- data/lib/regextest/back/result.rb +498 -0
- data/lib/regextest/back/test-case.rb +268 -0
- data/lib/regextest/back/work-thread.rb +119 -0
- data/lib/regextest/common.rb +63 -0
- data/lib/regextest/front.rb +60 -0
- data/lib/regextest/front/anchor.rb +45 -0
- data/lib/regextest/front/back-refer.rb +120 -0
- data/lib/regextest/front/bracket-parser.rb +400 -0
- data/lib/regextest/front/bracket-parser.y +117 -0
- data/lib/regextest/front/bracket-scanner.rb +124 -0
- data/lib/regextest/front/bracket.rb +64 -0
- data/lib/regextest/front/builtin-functions.rb +31 -0
- data/lib/regextest/front/case-folding.rb +18 -0
- data/lib/regextest/front/char-class.rb +243 -0
- data/lib/regextest/front/empty.rb +43 -0
- data/lib/regextest/front/letter.rb +327 -0
- data/lib/regextest/front/manage-parentheses.rb +74 -0
- data/lib/regextest/front/parenthesis.rb +153 -0
- data/lib/regextest/front/parser.rb +1366 -0
- data/lib/regextest/front/parser.y +271 -0
- data/lib/regextest/front/range.rb +60 -0
- data/lib/regextest/front/repeat.rb +90 -0
- data/lib/regextest/front/repeatable.rb +77 -0
- data/lib/regextest/front/scanner.rb +187 -0
- data/lib/regextest/front/selectable.rb +65 -0
- data/lib/regextest/front/sequence.rb +73 -0
- data/lib/regextest/front/unicode.rb +1272 -0
- data/lib/regextest/regex-option.rb +144 -0
- data/lib/regextest/regexp.rb +44 -0
- data/lib/regextest/version.rb +5 -0
- data/lib/tst-reg-test.rb +159 -0
- data/regextest.gemspec +26 -0
- metadata +162 -0
@@ -0,0 +1,60 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
# Copyright (C) 2016 Mikio Ikoma
|
4
|
+
|
5
|
+
# This routine defines front-end of Regextest
|
6
|
+
class Regextest::Front; end
|
7
|
+
require 'regextest/common'
|
8
|
+
require 'regextest/front/scanner' # scanner class (for splitting the string)
|
9
|
+
require 'regextest/front/parser' # parser class (using racc)
|
10
|
+
require 'regextest/front/manage-parentheses' # management class of parentheses
|
11
|
+
require "json"
|
12
|
+
|
13
|
+
# Front end processes
|
14
|
+
class Regextest::Front
|
15
|
+
include Regextest::Common
|
16
|
+
def initialize(reg_string, options)
|
17
|
+
@options = options
|
18
|
+
|
19
|
+
# scanning the string
|
20
|
+
scanner = Regextest::Front::Scanner.new
|
21
|
+
lex_words = scanner.scan(reg_string)
|
22
|
+
|
23
|
+
# initialize management class of parentheses
|
24
|
+
@options[:parens] = Regextest::Front::ManageParentheses.new()
|
25
|
+
|
26
|
+
# Prepare parsers (for whole regex parser and bracket parser)
|
27
|
+
@parser = RegextestFrontParser.new
|
28
|
+
|
29
|
+
# Do parse
|
30
|
+
@obj = @parser.parse(lex_words, @options)
|
31
|
+
|
32
|
+
# process options
|
33
|
+
@obj.set_options(options)
|
34
|
+
|
35
|
+
# sort parentheses, since number of parenthesis is by offset-order (not by parsing-order)
|
36
|
+
@options[:parens].sort
|
37
|
+
|
38
|
+
@obj
|
39
|
+
end
|
40
|
+
|
41
|
+
# Output JSON format parse result of the regex
|
42
|
+
def get_json_obj(result = @obj)
|
43
|
+
option = { max_nesting: 999} # work around for ruby 1.9.*
|
44
|
+
json_obj = JSON.parse(result.json, option)
|
45
|
+
TstLog("JSON param:\n" + JSON.pretty_generate(json_obj, option))
|
46
|
+
json_obj
|
47
|
+
end
|
48
|
+
|
49
|
+
# Return JSON string
|
50
|
+
def get_json_string(result = @obj)
|
51
|
+
json_obj = get_json_obj(result)
|
52
|
+
option = { max_nesting: 999} # work around for ruby 1.9.*
|
53
|
+
JSON.pretty_generate(json_obj, option)
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
# Test suite (execute when this file is specified in command line)
|
59
|
+
if __FILE__ == $0
|
60
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
# Copyright (C) 2016 Mikio Ikoma
|
4
|
+
|
5
|
+
require 'regextest/common'
|
6
|
+
require 'regextest/regex-option'
|
7
|
+
|
8
|
+
# Anchor class
|
9
|
+
module Regextest::Front::Anchor
|
10
|
+
class Anchor
|
11
|
+
include Regextest::Common
|
12
|
+
include Regextest::Common
|
13
|
+
@@id = 0 # a class variable for generating unique name of element
|
14
|
+
|
15
|
+
# Constructor
|
16
|
+
def initialize(type, val)
|
17
|
+
TstLog("Anchor: value:#{val}")
|
18
|
+
@type = type
|
19
|
+
@value = val[0] || ""
|
20
|
+
@offset = val[1] || -1
|
21
|
+
@length = val[2] || 0
|
22
|
+
end
|
23
|
+
|
24
|
+
attr_reader :offset, :length
|
25
|
+
|
26
|
+
# set options
|
27
|
+
def set_options(options)
|
28
|
+
TstLog("Anchor set_options: #{options[:reg_options].inspect}");
|
29
|
+
end
|
30
|
+
|
31
|
+
# transform to json format
|
32
|
+
def json
|
33
|
+
@@id += 1
|
34
|
+
"{" +
|
35
|
+
"\"type\": \"#{@type}\", \"id\": \"A#{@@id}\", \"value\": \"#{@value}\", " +
|
36
|
+
"\"offset\": #{@offset}, \"length\": #{@length}" +
|
37
|
+
"}"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
# Test suite (execute when this file is specified in command line)
|
43
|
+
if __FILE__ == $0
|
44
|
+
end
|
45
|
+
|
@@ -0,0 +1,120 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
# Copyright (C) 2016 Mikio Ikoma
|
4
|
+
|
5
|
+
require 'regextest/common'
|
6
|
+
|
7
|
+
# Parse back refer element (\1, \k<foo> etc.)
|
8
|
+
module Regextest::Front::BackRefer
|
9
|
+
class BackRefer
|
10
|
+
include Regextest::Common
|
11
|
+
@@id = 0 # a class variable for generating unique name of element
|
12
|
+
|
13
|
+
# Constructor
|
14
|
+
def initialize(type, value)
|
15
|
+
TstLog("BackRefer: #{type} #{value}")
|
16
|
+
@type = type
|
17
|
+
@value = value[0]
|
18
|
+
@offset = value[1]
|
19
|
+
@length = value[2]
|
20
|
+
@options = @@parse_options
|
21
|
+
@paren_obj = nil
|
22
|
+
@relative_num = nil
|
23
|
+
end
|
24
|
+
|
25
|
+
attr_reader :offset, :length
|
26
|
+
|
27
|
+
# get corresponding parenthesis object
|
28
|
+
def get_paren(type, value)
|
29
|
+
case type
|
30
|
+
when :LEX_BACK_REFER # a pattern like \[1-9]
|
31
|
+
if(md = value.match(/^\\(\d+)$/))
|
32
|
+
@paren_obj = @options[:parens].get_paren(md[1].to_i)
|
33
|
+
else
|
34
|
+
raise "Error: Internal error, invalid back reference"
|
35
|
+
end
|
36
|
+
when :LEX_NAMED_REFER # a pattern like \k<foo>, \k<1>, \k<-1>
|
37
|
+
if(md = value.match(/^\\k[<']((\-\d+)|(\d+)|(\w+))(?:([\+\-]\d+))?[>']$/))
|
38
|
+
if md[2] # \k<-1>
|
39
|
+
@paren_obj = @options[:parens].get_paren(md[1], @offset)
|
40
|
+
elsif md[3] # \k<1>
|
41
|
+
@paren_obj = @options[:parens].get_paren(md[1].to_i)
|
42
|
+
elsif md[4] # \k<foo>
|
43
|
+
@paren_obj = @options[:parens].get_paren(md[1])
|
44
|
+
else
|
45
|
+
raise "internal error: unexpected refer #{value}"
|
46
|
+
end
|
47
|
+
if md[5]
|
48
|
+
@relative_num = md[3].to_i
|
49
|
+
end
|
50
|
+
else
|
51
|
+
raise "Error: Internal error, invalid named reference"
|
52
|
+
end
|
53
|
+
when :LEX_NAMED_GENERATE # a pattern like \g<foo>
|
54
|
+
if(md = value.match(/^\\g[<'](([\-\+]\d+)|(\d+)|(\w+))[>']$/))
|
55
|
+
if md[2] # \k<-1>
|
56
|
+
@paren_obj = @options[:parens].get_paren(md[1], @offset)
|
57
|
+
elsif md[3] # \k<1>
|
58
|
+
@paren_obj = @options[:parens].get_paren(md[1].to_i)
|
59
|
+
elsif md[4] # \k<foo>
|
60
|
+
@paren_obj = @options[:parens].get_paren(md[1])
|
61
|
+
else
|
62
|
+
raise "internal error: unexpected refer #{value}"
|
63
|
+
end
|
64
|
+
|
65
|
+
if(!@paren_obj && md[1].match(/^\d+$/))
|
66
|
+
paren_offset = md[1].to_i
|
67
|
+
if paren_offset == 0
|
68
|
+
@paren_obj = :WHOLE_REG_EXPRESSION
|
69
|
+
else
|
70
|
+
@paren_obj = @options[:parens].get_paren(paren_offset)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
else
|
74
|
+
raise "Error: Internal error, invalid named reference"
|
75
|
+
end
|
76
|
+
else
|
77
|
+
raise "Error: internal error. unexpected refer type"
|
78
|
+
end
|
79
|
+
@paren_obj
|
80
|
+
end
|
81
|
+
|
82
|
+
# set options
|
83
|
+
def set_options(options)
|
84
|
+
TstLog("BackRefer set_options: #{options[:reg_options].inspect}");
|
85
|
+
# nothing to do
|
86
|
+
self
|
87
|
+
end
|
88
|
+
|
89
|
+
# transform to json format
|
90
|
+
def json
|
91
|
+
@paren_obj = get_paren(@type, @value)
|
92
|
+
case @paren_obj
|
93
|
+
when Regextest::Front::Parenthesis::Paren
|
94
|
+
name = @paren_obj.name
|
95
|
+
refer_name = @paren_obj.refer_name
|
96
|
+
when :WHOLE_REG_EXPRESSION
|
97
|
+
name = ""
|
98
|
+
refer_name = "$$_0"
|
99
|
+
else
|
100
|
+
raise "Error: parenthesis not found: type: #{@type}, value: #{@value}"
|
101
|
+
end
|
102
|
+
|
103
|
+
@@id += 1
|
104
|
+
"{\"type\": \"#{@type}\", " +
|
105
|
+
"\"value\": \"#{@value}\", " +
|
106
|
+
"\"offset\": \"#{@offset}\", " +
|
107
|
+
"\"length\": \"#{@length}\", " +
|
108
|
+
"\"name\": \"#{name}\", " +
|
109
|
+
" \"id\": \"c#{@@id}\", " +
|
110
|
+
"\"refer_name\": \"#{refer_name}\", " +
|
111
|
+
"\"relative_num\": \"#{@relative_num}\" " +
|
112
|
+
"}"
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
# Test suite (execute when this file is specified in command line)
|
118
|
+
if __FILE__ == $0
|
119
|
+
end
|
120
|
+
|
@@ -0,0 +1,400 @@
|
|
1
|
+
#
|
2
|
+
# DO NOT MODIFY!!!!
|
3
|
+
# This file is automatically generated by Racc 1.4.12
|
4
|
+
# from Racc grammer file "".
|
5
|
+
#
|
6
|
+
|
7
|
+
require 'racc/parser.rb'
|
8
|
+
|
9
|
+
# parser classes
|
10
|
+
require 'regextest/front/bracket-scanner' # scanner class (for splitting the string)
|
11
|
+
require 'regextest/front/letter' # parser class for a letter
|
12
|
+
require 'regextest/front/range' # parser class for a range of letters
|
13
|
+
require 'regextest/front/char-class' # parser class for a char-class element
|
14
|
+
require 'regextest/front/bracket' # parser class for a bracket
|
15
|
+
|
16
|
+
class RegextestFrontBracketParser < Racc::Parser
|
17
|
+
|
18
|
+
module_eval(<<'...end bracket-parser.y/module_eval...', 'bracket-parser.y', 73)
|
19
|
+
# modules for sharing procedures with main (regex) parser
|
20
|
+
include Regextest::Front::Range
|
21
|
+
include Regextest::Front::Letter
|
22
|
+
include Regextest::Front::CharClass
|
23
|
+
include Regextest::Front::Bracket
|
24
|
+
|
25
|
+
# execute to parse
|
26
|
+
def parse(value, options)
|
27
|
+
@bracket_str = value[0]
|
28
|
+
@options = options
|
29
|
+
|
30
|
+
# check / verify input string
|
31
|
+
if(!md = @bracket_str.match(/^(\[\^?)(.*)\]$/))
|
32
|
+
raise "Internal error. bracket notation error"
|
33
|
+
end
|
34
|
+
bracket_header = md[1]
|
35
|
+
seq_str = md[2]
|
36
|
+
|
37
|
+
# scanning for spliting into elements
|
38
|
+
scanner = Regextest::Front::BracketScanner.new(options)
|
39
|
+
@q = scanner.scan(seq_str)
|
40
|
+
|
41
|
+
# execute to parse
|
42
|
+
begin
|
43
|
+
parse_result = do_parse
|
44
|
+
rescue Racc::ParseError => ex
|
45
|
+
raise "Bracket " + ex.message
|
46
|
+
end
|
47
|
+
|
48
|
+
|
49
|
+
# return an analized bracket to main routine
|
50
|
+
Bracket.new(value, parse_result)
|
51
|
+
end
|
52
|
+
|
53
|
+
# parse next token
|
54
|
+
def next_token
|
55
|
+
@q.shift
|
56
|
+
end
|
57
|
+
|
58
|
+
# error handling routine
|
59
|
+
#def on_error(t, val, vstack)
|
60
|
+
## warn "t=#{t}, val=#{val}, vstack=#{vstack}"
|
61
|
+
#raise "Bracket Parse error. str=#{@bracket_str} offset=#{val[1]}, letter=#{val[0]}, stack=#{vstack}"
|
62
|
+
#end
|
63
|
+
...end bracket-parser.y/module_eval...
|
64
|
+
##### State transition tables begin ###
|
65
|
+
|
66
|
+
racc_action_table = [
|
67
|
+
3, 14, 9, 10, 11, 12, 13, 15, 16, 17,
|
68
|
+
18, 19, 20, 21, 22, 23, 24, 3, 14, 9,
|
69
|
+
10, 11, 12, 13, 15, 16, 17, 18, 19, 20,
|
70
|
+
21, 22, 23, 24, 3, 14, 9, 10, 11, 12,
|
71
|
+
13, 15, 16, 17, 18, 19, 20, 21, 22, 23,
|
72
|
+
24, 3, 14, 9, 10, 11, 12, 13, 15, 16,
|
73
|
+
17, 18, 19, 20, 21, 22, 23, 24, 14, 9,
|
74
|
+
10, 11, 12, 13, 15, 16, 17, 18, 19, 20,
|
75
|
+
21, 22, 23, 24, 14, 9, 10, 11, 12, 13,
|
76
|
+
15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
|
77
|
+
14, 9, 10, 11, 12, 13, 15, 16, 17, 18,
|
78
|
+
19, 20, 21, 22, 23, 24, 14, 26, 35, 11,
|
79
|
+
12, 13, 15, 16, 17, 18, 19, 25, 32, 26,
|
80
|
+
26, 36, 29 ]
|
81
|
+
|
82
|
+
racc_action_check = [
|
83
|
+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
84
|
+
0, 0, 0, 0, 0, 0, 0, 26, 26, 26,
|
85
|
+
26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
|
86
|
+
26, 26, 26, 26, 9, 9, 9, 9, 9, 9,
|
87
|
+
9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
|
88
|
+
9, 10, 10, 10, 10, 10, 10, 10, 10, 10,
|
89
|
+
10, 10, 10, 10, 10, 10, 10, 10, 27, 27,
|
90
|
+
27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
|
91
|
+
27, 27, 27, 27, 4, 4, 4, 4, 4, 4,
|
92
|
+
4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
|
93
|
+
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
|
94
|
+
3, 3, 3, 3, 3, 3, 29, 30, 30, 29,
|
95
|
+
29, 29, 29, 29, 29, 29, 29, 1, 25, 1,
|
96
|
+
31, 31, 6 ]
|
97
|
+
|
98
|
+
racc_action_pointer = [
|
99
|
+
-3, 127, nil, 96, 80, nil, 128, nil, nil, 31,
|
100
|
+
48, nil, nil, nil, nil, nil, nil, nil, nil, nil,
|
101
|
+
nil, nil, nil, nil, nil, 128, 14, 64, nil, 112,
|
102
|
+
115, 128, nil, nil, nil, nil, nil ]
|
103
|
+
|
104
|
+
racc_action_default = [
|
105
|
+
-28, -28, -1, -4, -5, -6, -9, -10, -11, -28,
|
106
|
+
-28, -14, -15, -16, -17, -18, -19, -20, -21, -22,
|
107
|
+
-23, -24, -25, -26, -27, -28, -28, -3, -7, -28,
|
108
|
+
-28, -28, 37, -2, -8, -12, -13 ]
|
109
|
+
|
110
|
+
racc_goto_table = [
|
111
|
+
28, 1, 27, 33, 34, nil, nil, nil, nil, nil,
|
112
|
+
30, 31, nil, nil, nil, nil, nil, nil, nil, nil,
|
113
|
+
nil, nil, nil, 28 ]
|
114
|
+
|
115
|
+
racc_goto_check = [
|
116
|
+
4, 1, 3, 2, 5, nil, nil, nil, nil, nil,
|
117
|
+
1, 1, nil, nil, nil, nil, nil, nil, nil, nil,
|
118
|
+
nil, nil, nil, 4 ]
|
119
|
+
|
120
|
+
racc_goto_pointer = [
|
121
|
+
nil, 1, -23, -1, -4, -25, nil, nil ]
|
122
|
+
|
123
|
+
racc_goto_default = [
|
124
|
+
nil, nil, 2, 4, 5, 6, 7, 8 ]
|
125
|
+
|
126
|
+
racc_reduce_table = [
|
127
|
+
0, 0, :racc_error,
|
128
|
+
1, 21, :_reduce_1,
|
129
|
+
3, 21, :_reduce_2,
|
130
|
+
2, 22, :_reduce_3,
|
131
|
+
1, 22, :_reduce_4,
|
132
|
+
1, 22, :_reduce_none,
|
133
|
+
1, 23, :_reduce_6,
|
134
|
+
2, 23, :_reduce_7,
|
135
|
+
3, 24, :_reduce_8,
|
136
|
+
1, 24, :_reduce_9,
|
137
|
+
1, 24, :_reduce_10,
|
138
|
+
1, 24, :_reduce_11,
|
139
|
+
3, 27, :_reduce_12,
|
140
|
+
3, 27, :_reduce_13,
|
141
|
+
1, 25, :_reduce_14,
|
142
|
+
1, 25, :_reduce_15,
|
143
|
+
1, 25, :_reduce_16,
|
144
|
+
1, 25, :_reduce_17,
|
145
|
+
1, 25, :_reduce_18,
|
146
|
+
1, 25, :_reduce_19,
|
147
|
+
1, 25, :_reduce_20,
|
148
|
+
1, 25, :_reduce_21,
|
149
|
+
1, 25, :_reduce_22,
|
150
|
+
1, 26, :_reduce_23,
|
151
|
+
1, 26, :_reduce_24,
|
152
|
+
1, 26, :_reduce_25,
|
153
|
+
1, 26, :_reduce_26,
|
154
|
+
1, 26, :_reduce_27 ]
|
155
|
+
|
156
|
+
racc_reduce_n = 28
|
157
|
+
|
158
|
+
racc_shift_n = 37
|
159
|
+
|
160
|
+
racc_token_table = {
|
161
|
+
false => 0,
|
162
|
+
:error => 1,
|
163
|
+
:LEX_AND_AND => 2,
|
164
|
+
:LEX_BRACKET_END => 3,
|
165
|
+
:LEX_MINUS => 4,
|
166
|
+
:LEX_BRACKET_START => 5,
|
167
|
+
:LEX_BRACKET_START2 => 6,
|
168
|
+
:LEX_CHAR => 7,
|
169
|
+
:LEX_OCTET => 8,
|
170
|
+
:LEX_SIMPLE_ESCAPE => 9,
|
171
|
+
:LEX_CODE_LITERAL => 10,
|
172
|
+
:LEX_CONTROL_LETTER => 11,
|
173
|
+
:LEX_META_LETTER => 12,
|
174
|
+
:LEX_ESCAPED_LETTER => 13,
|
175
|
+
:LEX_UNICODE => 14,
|
176
|
+
:LEX_POSIX_CHAR_CLASS => 15,
|
177
|
+
:LEX_SIMPLIFIED_CLASS => 16,
|
178
|
+
:LEX_UNICODE_CLASS => 17,
|
179
|
+
:LEX_SPECIAL_LETTER => 18,
|
180
|
+
:LEX_SPACE => 19 }
|
181
|
+
|
182
|
+
racc_nt_base = 20
|
183
|
+
|
184
|
+
racc_use_result_var = false
|
185
|
+
|
186
|
+
Racc_arg = [
|
187
|
+
racc_action_table,
|
188
|
+
racc_action_check,
|
189
|
+
racc_action_default,
|
190
|
+
racc_action_pointer,
|
191
|
+
racc_goto_table,
|
192
|
+
racc_goto_check,
|
193
|
+
racc_goto_default,
|
194
|
+
racc_goto_pointer,
|
195
|
+
racc_nt_base,
|
196
|
+
racc_reduce_table,
|
197
|
+
racc_token_table,
|
198
|
+
racc_shift_n,
|
199
|
+
racc_reduce_n,
|
200
|
+
racc_use_result_var ]
|
201
|
+
|
202
|
+
Racc_token_to_s_table = [
|
203
|
+
"$end",
|
204
|
+
"error",
|
205
|
+
"LEX_AND_AND",
|
206
|
+
"LEX_BRACKET_END",
|
207
|
+
"LEX_MINUS",
|
208
|
+
"LEX_BRACKET_START",
|
209
|
+
"LEX_BRACKET_START2",
|
210
|
+
"LEX_CHAR",
|
211
|
+
"LEX_OCTET",
|
212
|
+
"LEX_SIMPLE_ESCAPE",
|
213
|
+
"LEX_CODE_LITERAL",
|
214
|
+
"LEX_CONTROL_LETTER",
|
215
|
+
"LEX_META_LETTER",
|
216
|
+
"LEX_ESCAPED_LETTER",
|
217
|
+
"LEX_UNICODE",
|
218
|
+
"LEX_POSIX_CHAR_CLASS",
|
219
|
+
"LEX_SIMPLIFIED_CLASS",
|
220
|
+
"LEX_UNICODE_CLASS",
|
221
|
+
"LEX_SPECIAL_LETTER",
|
222
|
+
"LEX_SPACE",
|
223
|
+
"$start",
|
224
|
+
"brc_sq1",
|
225
|
+
"brc_sq2",
|
226
|
+
"brc_sq3",
|
227
|
+
"brc_elm",
|
228
|
+
"brc_lt1",
|
229
|
+
"brc_lt2",
|
230
|
+
"reg_bracket" ]
|
231
|
+
|
232
|
+
Racc_debug_parser = false
|
233
|
+
|
234
|
+
##### State transition tables end #####
|
235
|
+
|
236
|
+
# reduce 0 omitted
|
237
|
+
|
238
|
+
module_eval(<<'.,.,', 'bracket-parser.y', 10)
|
239
|
+
def _reduce_1(val, _values)
|
240
|
+
val[0]
|
241
|
+
end
|
242
|
+
.,.,
|
243
|
+
|
244
|
+
module_eval(<<'.,.,', 'bracket-parser.y', 12)
|
245
|
+
def _reduce_2(val, _values)
|
246
|
+
val[0].and(val[2])
|
247
|
+
end
|
248
|
+
.,.,
|
249
|
+
|
250
|
+
module_eval(<<'.,.,', 'bracket-parser.y', 16)
|
251
|
+
def _reduce_3(val, _values)
|
252
|
+
val[1].add(TLetter.new(:LEX_CHAR,val[0]))
|
253
|
+
end
|
254
|
+
.,.,
|
255
|
+
|
256
|
+
module_eval(<<'.,.,', 'bracket-parser.y', 18)
|
257
|
+
def _reduce_4(val, _values)
|
258
|
+
CharClass.new(TLetter.new(:LEX_CHAR,val[0]))
|
259
|
+
end
|
260
|
+
.,.,
|
261
|
+
|
262
|
+
# reduce 5 omitted
|
263
|
+
|
264
|
+
module_eval(<<'.,.,', 'bracket-parser.y', 23)
|
265
|
+
def _reduce_6(val, _values)
|
266
|
+
CharClass.new(val[0])
|
267
|
+
end
|
268
|
+
.,.,
|
269
|
+
|
270
|
+
module_eval(<<'.,.,', 'bracket-parser.y', 25)
|
271
|
+
def _reduce_7(val, _values)
|
272
|
+
val[0].add(val[1])
|
273
|
+
end
|
274
|
+
.,.,
|
275
|
+
|
276
|
+
module_eval(<<'.,.,', 'bracket-parser.y', 29)
|
277
|
+
def _reduce_8(val, _values)
|
278
|
+
TRange.new(val[0], val[2])
|
279
|
+
end
|
280
|
+
.,.,
|
281
|
+
|
282
|
+
module_eval(<<'.,.,', 'bracket-parser.y', 31)
|
283
|
+
def _reduce_9(val, _values)
|
284
|
+
val[0]
|
285
|
+
end
|
286
|
+
.,.,
|
287
|
+
|
288
|
+
module_eval(<<'.,.,', 'bracket-parser.y', 33)
|
289
|
+
def _reduce_10(val, _values)
|
290
|
+
val[0]
|
291
|
+
end
|
292
|
+
.,.,
|
293
|
+
|
294
|
+
module_eval(<<'.,.,', 'bracket-parser.y', 35)
|
295
|
+
def _reduce_11(val, _values)
|
296
|
+
val[0]
|
297
|
+
end
|
298
|
+
.,.,
|
299
|
+
|
300
|
+
module_eval(<<'.,.,', 'bracket-parser.y', 39)
|
301
|
+
def _reduce_12(val, _values)
|
302
|
+
Bracket.new(val[0], val[1])
|
303
|
+
end
|
304
|
+
.,.,
|
305
|
+
|
306
|
+
module_eval(<<'.,.,', 'bracket-parser.y', 41)
|
307
|
+
def _reduce_13(val, _values)
|
308
|
+
Bracket.new(val[0], val[1])
|
309
|
+
end
|
310
|
+
.,.,
|
311
|
+
|
312
|
+
module_eval(<<'.,.,', 'bracket-parser.y', 44)
|
313
|
+
def _reduce_14(val, _values)
|
314
|
+
TLetter.new(:LEX_CHAR, val[0])
|
315
|
+
end
|
316
|
+
.,.,
|
317
|
+
|
318
|
+
module_eval(<<'.,.,', 'bracket-parser.y', 45)
|
319
|
+
def _reduce_15(val, _values)
|
320
|
+
TLetter.new(:LEX_OCTET, val[0])
|
321
|
+
end
|
322
|
+
.,.,
|
323
|
+
|
324
|
+
module_eval(<<'.,.,', 'bracket-parser.y', 46)
|
325
|
+
def _reduce_16(val, _values)
|
326
|
+
TLetter.new(:LEX_SIMPLE_ESCAPE, val[0])
|
327
|
+
end
|
328
|
+
.,.,
|
329
|
+
|
330
|
+
module_eval(<<'.,.,', 'bracket-parser.y', 47)
|
331
|
+
def _reduce_17(val, _values)
|
332
|
+
TLetter.new(:LEX_CHAR, val[0])
|
333
|
+
end
|
334
|
+
.,.,
|
335
|
+
|
336
|
+
module_eval(<<'.,.,', 'bracket-parser.y', 48)
|
337
|
+
def _reduce_18(val, _values)
|
338
|
+
TLetter.new(:LEX_CODE_LITERAL, val[0])
|
339
|
+
end
|
340
|
+
.,.,
|
341
|
+
|
342
|
+
module_eval(<<'.,.,', 'bracket-parser.y', 49)
|
343
|
+
def _reduce_19(val, _values)
|
344
|
+
TLetter.new(:LEX_CONTROL_LETTER, val[0])
|
345
|
+
end
|
346
|
+
.,.,
|
347
|
+
|
348
|
+
module_eval(<<'.,.,', 'bracket-parser.y', 50)
|
349
|
+
def _reduce_20(val, _values)
|
350
|
+
TLetter.new(:LEX_CONTROL_LETTER, val[0])
|
351
|
+
end
|
352
|
+
.,.,
|
353
|
+
|
354
|
+
module_eval(<<'.,.,', 'bracket-parser.y', 51)
|
355
|
+
def _reduce_21(val, _values)
|
356
|
+
TLetter.new(:LEX_ESCAPED_LETTER, val[0])
|
357
|
+
end
|
358
|
+
.,.,
|
359
|
+
|
360
|
+
module_eval(<<'.,.,', 'bracket-parser.y', 52)
|
361
|
+
def _reduce_22(val, _values)
|
362
|
+
TLetter.new(:LEX_UNICODE, val[0])
|
363
|
+
end
|
364
|
+
.,.,
|
365
|
+
|
366
|
+
module_eval(<<'.,.,', 'bracket-parser.y', 55)
|
367
|
+
def _reduce_23(val, _values)
|
368
|
+
TLetter.new(:LEX_POSIX_CHAR_CLASS, val[0])
|
369
|
+
end
|
370
|
+
.,.,
|
371
|
+
|
372
|
+
module_eval(<<'.,.,', 'bracket-parser.y', 56)
|
373
|
+
def _reduce_24(val, _values)
|
374
|
+
TLetter.new(:LEX_SIMPLIFIED_CLASS, val[0])
|
375
|
+
end
|
376
|
+
.,.,
|
377
|
+
|
378
|
+
module_eval(<<'.,.,', 'bracket-parser.y', 57)
|
379
|
+
def _reduce_25(val, _values)
|
380
|
+
TLetter.new(:LEX_UNICODE_CLASS, val[0])
|
381
|
+
end
|
382
|
+
.,.,
|
383
|
+
|
384
|
+
module_eval(<<'.,.,', 'bracket-parser.y', 58)
|
385
|
+
def _reduce_26(val, _values)
|
386
|
+
TLetter.new(:LEX_SPECIAL_LETTER, val[0])
|
387
|
+
end
|
388
|
+
.,.,
|
389
|
+
|
390
|
+
module_eval(<<'.,.,', 'bracket-parser.y', 59)
|
391
|
+
def _reduce_27(val, _values)
|
392
|
+
TLetter.new(:LEX_SPACE, val[0])
|
393
|
+
end
|
394
|
+
.,.,
|
395
|
+
|
396
|
+
def _reduce_none(val, _values)
|
397
|
+
val[0]
|
398
|
+
end
|
399
|
+
|
400
|
+
end # class RegextestFrontBracketParser
|