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.
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