regextest 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (64) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +11 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +3 -0
  5. data/Gemfile +4 -0
  6. data/LICENSE.txt +25 -0
  7. data/README.md +88 -0
  8. data/Rakefile +55 -0
  9. data/bin/console +14 -0
  10. data/bin/regextest +4 -0
  11. data/bin/setup +7 -0
  12. data/contrib/Onigmo/RE.txt +522 -0
  13. data/contrib/Onigmo/UnicodeProps.txt +728 -0
  14. data/contrib/Onigmo/testpy.py +1319 -0
  15. data/contrib/unicode/Blocks.txt +298 -0
  16. data/contrib/unicode/CaseFolding.txt +1414 -0
  17. data/contrib/unicode/DerivedAge.txt +1538 -0
  18. data/contrib/unicode/DerivedCoreProperties.txt +11029 -0
  19. data/contrib/unicode/PropList.txt +1525 -0
  20. data/contrib/unicode/PropertyAliases.txt +193 -0
  21. data/contrib/unicode/PropertyValueAliases.txt +1420 -0
  22. data/contrib/unicode/README.txt +25 -0
  23. data/contrib/unicode/Scripts.txt +2539 -0
  24. data/contrib/unicode/UnicodeData.txt +29215 -0
  25. data/lib/pre-case-folding.rb +101 -0
  26. data/lib/pre-posix-char-class.rb +150 -0
  27. data/lib/pre-unicode.rb +116 -0
  28. data/lib/regextest.rb +268 -0
  29. data/lib/regextest/back.rb +58 -0
  30. data/lib/regextest/back/element.rb +151 -0
  31. data/lib/regextest/back/main.rb +356 -0
  32. data/lib/regextest/back/result.rb +498 -0
  33. data/lib/regextest/back/test-case.rb +268 -0
  34. data/lib/regextest/back/work-thread.rb +119 -0
  35. data/lib/regextest/common.rb +63 -0
  36. data/lib/regextest/front.rb +60 -0
  37. data/lib/regextest/front/anchor.rb +45 -0
  38. data/lib/regextest/front/back-refer.rb +120 -0
  39. data/lib/regextest/front/bracket-parser.rb +400 -0
  40. data/lib/regextest/front/bracket-parser.y +117 -0
  41. data/lib/regextest/front/bracket-scanner.rb +124 -0
  42. data/lib/regextest/front/bracket.rb +64 -0
  43. data/lib/regextest/front/builtin-functions.rb +31 -0
  44. data/lib/regextest/front/case-folding.rb +18 -0
  45. data/lib/regextest/front/char-class.rb +243 -0
  46. data/lib/regextest/front/empty.rb +43 -0
  47. data/lib/regextest/front/letter.rb +327 -0
  48. data/lib/regextest/front/manage-parentheses.rb +74 -0
  49. data/lib/regextest/front/parenthesis.rb +153 -0
  50. data/lib/regextest/front/parser.rb +1366 -0
  51. data/lib/regextest/front/parser.y +271 -0
  52. data/lib/regextest/front/range.rb +60 -0
  53. data/lib/regextest/front/repeat.rb +90 -0
  54. data/lib/regextest/front/repeatable.rb +77 -0
  55. data/lib/regextest/front/scanner.rb +187 -0
  56. data/lib/regextest/front/selectable.rb +65 -0
  57. data/lib/regextest/front/sequence.rb +73 -0
  58. data/lib/regextest/front/unicode.rb +1272 -0
  59. data/lib/regextest/regex-option.rb +144 -0
  60. data/lib/regextest/regexp.rb +44 -0
  61. data/lib/regextest/version.rb +5 -0
  62. data/lib/tst-reg-test.rb +159 -0
  63. data/regextest.gemspec +26 -0
  64. 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