oedipus_lex 2.5.0 → 2.5.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 61879597d87d6ef9e59b495a38e10617e03f3277
4
- data.tar.gz: e5e415035c15bc8c02007a3479f0bbd2fd0d8621
2
+ SHA256:
3
+ metadata.gz: 8cb423b537f9675d2c16f2dea13fe319f1a9201164e8eeefa9a4275640220607
4
+ data.tar.gz: b92269a7b11988954a9457a36df57c7199f1f95f74d862fbc20e7d6aec770ad6
5
5
  SHA512:
6
- metadata.gz: dd4aea54ccd7eb1731bdc5639d4932fe1eadb5b188cf9a79a75971599adeadbfbc867b5790fcb09cf8bdad68f09f715154852a251953b0aa37a66f142c6bc423
7
- data.tar.gz: 0beb1c01b05a3e567bc0c0702c2c675096a96e0801604e89d28ef7197e7e02fd154a5c1facff60447d068211d2013e04a67e8be260bdcfb2420222a072ff4e97
6
+ metadata.gz: 9bd0f74cb429fd8f92b202a1dbaa38f4a69eab05da150801f59f36c2e7476b2d494304d17e8993ecbd563692dce0e7c15f20dfee5f4b0d6c92c5abc72d96b4b8
7
+ data.tar.gz: ba7831924e35607b5db556c42e7d0469c8f71d8c87feb67322b05599cfe83d8884f4559e5f068570dc7e36a1b8dcc92c17b2e148685742a45a199b04caf50bdc
Binary file
data.tar.gz.sig CHANGED
@@ -1,2 +1,2 @@
1
- �+��|@�+�7q�N�GG����l��� `xj1\���փ/"|�&v�����U���p�ч��iueSZ���k"I�����k"\�ǝ)����
2
- v/�� ��NQ�ʑhQ<�<��qz�ڣV���q"�t��ǰ�f:��# wK��x����� xl��;#IN-�koy�
1
+ Lr�o��s�����_�d_ɢ��x ��L�P��#�_�:�*���F�6W�bV�yi��N�=|Wzd)U��ϫ�s[b��3]��4���U�7�=�;��%�����Lױ��t�KO�_m`hqa{0vG]1Q %Uї�*N Z��hk' ~wyM�/m8\��e@ D�WT(�V�O\R����Eq�b8�T0�g�0m��@���`z�'/���sGg�^M\��q�)�����E �������>�
2
+ Q
@@ -1,3 +1,13 @@
1
+ === 2.5.1 / 2019-06-03
2
+
3
+ * 1 minor enhancement:
4
+
5
+ * Added full rdoc an re-bootstrapped.
6
+
7
+ * 1 bug fix:
8
+
9
+ * Fixed a deprecation warning in ruby 2.6+.
10
+
1
11
  === 2.5.0 / 2016-11-30
2
12
 
3
13
  * 5 minor enhancements:
@@ -3,20 +3,85 @@ require 'strscan'
3
3
  require "erb"
4
4
  require "oedipus_lex.rex"
5
5
 
6
+ ##
7
+ # Oedipus Lex is a lexer generator in the same family as Rexical and
8
+ # Rex. Oedipus Lex is my independent lexer fork of Rexical. Rexical
9
+ # was in turn a fork of Rex. We've been unable to contact the author
10
+ # of rex in order to take it over, fix it up, extend it, and relicense
11
+ # it to MIT. So, Oedipus was written clean-room in order to bypass
12
+ # licensing constraints (and because bootstrapping is fun).
13
+ #
14
+ # Oedipus brings a lot of extras to the table and at this point is
15
+ # only historically related to rexical. The syntax has changed enough
16
+ # that any rexical lexer will have to be tweaked to work inside of
17
+ # oedipus. At the very least, you need to add slashes to all your
18
+ # regexps.
19
+ #
20
+ # Oedipus, like rexical, is based primarily on generating code much
21
+ # like you would a hand-written lexer. It is _not_ a table or hash
22
+ # driven lexer. It uses StrScanner within a multi-level case
23
+ # statement. As such, Oedipus matches on the _first_ match, not the
24
+ # longest (like lex and its ilk).
25
+ #
26
+ # This documentation is not meant to bypass any prerequisite knowledge
27
+ # on lexing or parsing. If you'd like to study the subject in further
28
+ # detail, please try [TIN321] or the [LLVM Tutorial] or some other
29
+ # good resource for CS learning. Books... books are good. I like
30
+ # books.
31
+
6
32
  class OedipusLex
7
- VERSION = "2.5.0"
33
+ VERSION = "2.5.1" # :nodoc:
34
+
35
+ ##
36
+ # The class name to generate.
8
37
 
9
38
  attr_accessor :class_name
39
+
40
+ ##
41
+ # An array of header lines to have before the lexer class.
42
+
10
43
  attr_accessor :header
44
+
45
+ ##
46
+ # An array of lines to have after the lexer class.
47
+
11
48
  attr_accessor :ends
49
+
50
+ ##
51
+ # An array of lines to have inside (but at the bottom of) the lexer
52
+ # class.
53
+
12
54
  attr_accessor :inners
55
+
56
+ ##
57
+ # An array of name/regexp pairs to generate constants inside the
58
+ # lexer class.
59
+
13
60
  attr_accessor :macros
61
+
62
+ ##
63
+ # A hash of options for the code generator. See README.rdoc for
64
+ # supported options.
65
+
14
66
  attr_accessor :option
67
+
68
+ ##
69
+ # The rules for the lexer.
70
+
15
71
  attr_accessor :rules
72
+
73
+ ##
74
+ # An array of lines of code to generate into the top of the lexer
75
+ # (next_token) loop.
76
+
16
77
  attr_accessor :starts
78
+
79
+ ##
80
+ # An array of all the groups within the lexer rules.
81
+
17
82
  attr_accessor :group
18
83
 
19
- DEFAULTS = {
84
+ DEFAULTS = { # :nodoc:
20
85
  :debug => false,
21
86
  :do_parse => false,
22
87
  :lineno => false,
@@ -24,21 +89,39 @@ class OedipusLex
24
89
  :stub => false,
25
90
  }
26
91
 
92
+ ##
93
+ # A Rule represents the main component of Oedipus Lex. These are the
94
+ # things that "get stuff done" at the lexical level. They consist of:
95
+ #
96
+ # + an optional required start state symbol or predicate method name
97
+ # + a regexp to match on
98
+ # + an optional action method or block
99
+
27
100
  class Rule < Struct.new :start_state, :regexp, :action
101
+ ##
102
+ # What group this rule is in, if any.
103
+
28
104
  attr_accessor :group
29
- alias :group? :group
105
+
106
+ alias :group? :group # :nodoc:
107
+
108
+ ##
109
+ # A simple constructor
30
110
 
31
111
  def self.[] start, regexp, action
32
112
  new start, regexp.inspect, action
33
113
  end
34
114
 
35
- def initialize start_state, regexp, action
115
+ def initialize start_state, regexp, action # :nodoc:
36
116
  super
37
117
  self.group = nil
38
118
  end
39
119
 
40
120
  undef_method :to_a
41
121
 
122
+ ##
123
+ # Generate equivalent ruby code for the rule.
124
+
42
125
  def to_ruby state, predicates, exclusive
43
126
  return unless group? or
44
127
  start_state == state or
@@ -73,7 +156,7 @@ class OedipusLex
73
156
  ["when #{cond} then", body]
74
157
  end
75
158
 
76
- def pretty_print pp
159
+ def pretty_print pp # :nodoc:
77
160
  pp.text "Rule"
78
161
  pp.group 2, "[", "]" do
79
162
  pp.pp start_state
@@ -85,25 +168,37 @@ class OedipusLex
85
168
  end
86
169
  end
87
170
 
171
+ ##
172
+ # A group allows you to group up multiple rules under a single
173
+ # regular prefix expression, allowing optimized code to be generated
174
+ # that skips over all actions if the prefix isn't matched.
175
+
88
176
  class Group < Struct.new :regex, :rules
89
177
  alias :start_state :regex
90
178
 
179
+ ##
180
+ # A convenience method to create a new group with a +start+ and
181
+ # given +subrules+.
182
+
91
183
  def self.[] start, *subrules
92
184
  r = new start.inspect
93
185
  r.rules.concat subrules
94
186
  r
95
187
  end
96
188
 
97
- def initialize start
189
+ def initialize start # :nodoc:
98
190
  super(start, [])
99
191
  end
100
192
 
193
+ ##
194
+ # Add a rule to this group.
195
+
101
196
  def << rule
102
197
  rules << rule
103
198
  nil
104
199
  end
105
200
 
106
- def to_ruby state, predicates, exclusive
201
+ def to_ruby state, predicates, exclusive # :nodoc:
107
202
  [
108
203
  "when ss.match?(#{regex}) then",
109
204
  " case",
@@ -115,7 +210,7 @@ class OedipusLex
115
210
  ]
116
211
  end
117
212
 
118
- def pretty_print pp
213
+ def pretty_print pp # :nodoc:
119
214
  pp.text "Group"
120
215
  pp.group 2, "[", "]" do
121
216
  pp.seplist([regex] + rules, lambda { pp.comma_breakable }, :each) { |v|
@@ -125,6 +220,10 @@ class OedipusLex
125
220
  end
126
221
  end
127
222
 
223
+ ##
224
+ # A convenience method to create a new lexer with a +name+ and given
225
+ # +rules+.
226
+
128
227
  def self.[](name, *rules)
129
228
  r = new
130
229
  r.class_name = name
@@ -132,7 +231,7 @@ class OedipusLex
132
231
  r
133
232
  end
134
233
 
135
- def initialize opts = {}
234
+ def initialize opts = {} # :nodoc:
136
235
  self.option = DEFAULTS.merge opts
137
236
  self.class_name = nil
138
237
 
@@ -145,7 +244,7 @@ class OedipusLex
145
244
  self.group = nil
146
245
  end
147
246
 
148
- def == o
247
+ def == o # :nodoc:
149
248
  (o.class == self.class and
150
249
  o.class_name == self.class_name and
151
250
  o.header == self.header and
@@ -156,7 +255,7 @@ class OedipusLex
156
255
  o.starts == self.starts)
157
256
  end
158
257
 
159
- def pretty_print pp
258
+ def pretty_print pp # :nodoc:
160
259
  commas = lambda { pp.comma_breakable }
161
260
 
162
261
  pp.text "Lexer"
@@ -165,67 +264,109 @@ class OedipusLex
165
264
  end
166
265
  end
167
266
 
267
+ ##
268
+ # Process a +class+ lexeme.
269
+
168
270
  def lex_class prefix, name
169
271
  header.concat prefix.split(/\n/)
170
272
  self.class_name = name
171
273
  end
172
274
 
275
+ ##
276
+ # Process a +comment+ lexeme.
277
+
173
278
  def lex_comment line
174
279
  # do nothing
175
280
  end
176
281
 
282
+ ##
283
+ # Process an +end+ lexeme.
284
+
177
285
  def lex_end line
178
286
  ends << line
179
287
  end
180
288
 
289
+ ##
290
+ # Process an +inner+ lexeme.
291
+
181
292
  def lex_inner line
182
293
  inners << line
183
294
  end
184
295
 
296
+ ##
297
+ # Process a +start+ lexeme.
298
+
185
299
  def lex_start line
186
300
  starts << line.strip
187
301
  end
188
302
 
303
+ ##
304
+ # Process a +macro+ lexeme.
305
+
189
306
  def lex_macro name, value
190
307
  macros << [name, value]
191
308
  end
192
309
 
310
+ ##
311
+ # Process an +option+ lexeme.
312
+
193
313
  def lex_option option
194
314
  self.option[option.to_sym] = true
195
315
  end
196
316
 
317
+ ##
318
+ # Process a +X+ lexeme.
319
+
197
320
  def lex_rule start_state, regexp, action = nil
198
321
  rules << Rule.new(start_state, regexp, action)
199
322
  end
200
323
 
324
+ ##
325
+ # Process a +group head+ lexeme.
326
+
201
327
  def lex_grouphead re
202
328
  end_group if group
203
329
  self.state = :group
204
330
  self.group = Group.new re
205
331
  end
206
332
 
333
+ ##
334
+ # Process a +group+ lexeme.
335
+
207
336
  def lex_group start_state, regexp, action = nil
208
337
  rule = Rule.new(start_state, regexp, action)
209
338
  rule.group = group
210
339
  self.group << rule
211
340
  end
212
341
 
342
+ ##
343
+ # End a group.
344
+
213
345
  def end_group
214
346
  rules << group
215
347
  self.group = nil
216
348
  self.state = :rule
217
349
  end
218
350
 
351
+ ##
352
+ # Process the end of a +group+ lexeme.
353
+
219
354
  def lex_groupend start_state, regexp, action = nil
220
355
  end_group
221
356
  lex_rule start_state, regexp, action
222
357
  end
223
358
 
359
+ ##
360
+ # Process a +state+ lexeme.
361
+
224
362
  def lex_state new_state
225
363
  end_group if group
226
364
  # do nothing -- lexer switches state for us
227
365
  end
228
366
 
367
+ ##
368
+ # Generate the lexer.
369
+
229
370
  def generate
230
371
  filter = lambda { |r| Rule === r && r.start_state || nil }
231
372
  _mystates = rules.map(&filter).flatten.compact.uniq
@@ -241,9 +382,17 @@ class OedipusLex
241
382
  encoding = header.shift if header.first =~ /encoding:/
242
383
  encoding ||= "# encoding: UTF-8"
243
384
 
244
- ERB.new(TEMPLATE, nil, "%").result binding
385
+ erb = if RUBY_VERSION >= "2.6.0" then
386
+ ERB.new(TEMPLATE, trim_mode:"%")
387
+ else
388
+ ERB.new(TEMPLATE, nil, "%")
389
+ end
390
+
391
+ erb.result binding
245
392
  end
246
393
 
394
+ # :stopdoc:
395
+
247
396
  TEMPLATE = <<-'REX'.gsub(/^ {6}/, '')
248
397
  <%= encoding %>
249
398
  #--
@@ -260,41 +409,74 @@ class OedipusLex
260
409
  % end
261
410
 
262
411
  % end
412
+
413
+ ##
414
+ # The generated lexer <%= class_name %>
415
+
263
416
  class <%= class_name %>
264
417
  require 'strscan'
265
418
 
266
419
  % unless macros.empty? then
420
+ # :stopdoc:
267
421
  % max = macros.map { |(k,_)| k.size }.max
268
422
  % macros.each do |(k,v)|
269
423
  <%= "%-#{max}s = %s" % [k, v] %>
270
424
  % end
271
-
425
+ # :startdoc:
272
426
  % end
427
+ # :stopdoc:
273
428
  class LexerError < StandardError ; end
274
429
  class ScanError < LexerError ; end
430
+ # :startdoc:
275
431
 
276
432
  % if option[:lineno] then
433
+ ##
434
+ # The current line number.
435
+
277
436
  attr_accessor :lineno
278
437
  % end
438
+ ##
439
+ # The file name / path
440
+
279
441
  attr_accessor :filename
442
+
443
+ ##
444
+ # The StringScanner for this lexer.
445
+
280
446
  attr_accessor :ss
447
+
448
+ ##
449
+ # The current lexical state.
450
+
281
451
  attr_accessor :state
282
452
 
283
453
  alias :match :ss
284
454
 
455
+ ##
456
+ # The match groups for the current scan.
457
+
285
458
  def matches
286
459
  m = (1..9).map { |i| ss[i] }
287
460
  m.pop until m[-1] or m.empty?
288
461
  m
289
462
  end
290
463
 
464
+ ##
465
+ # Yields on the current action.
466
+
291
467
  def action
292
468
  yield
293
469
  end
294
470
 
295
471
  % if option[:column] then
472
+ ##
473
+ # The previous position. Only available if the :column option is on.
474
+
296
475
  attr_accessor :old_pos
297
476
 
477
+ ##
478
+ # The current column. Only available if the :column option is on.
479
+
298
480
  def column
299
481
  idx = ss.string.rindex("\n", old_pos) || -1
300
482
  old_pos - idx - 1
@@ -302,6 +484,9 @@ class OedipusLex
302
484
 
303
485
  % end
304
486
  % if option[:do_parse] then
487
+ ##
488
+ # Parse the file by getting all tokens and calling lex_+type+ on them.
489
+
305
490
  def do_parse
306
491
  while token = next_token do
307
492
  type, *vals = token
@@ -311,10 +496,17 @@ class OedipusLex
311
496
  end
312
497
 
313
498
  % end
499
+
500
+ ##
501
+ # The current scanner class. Must be overridden in subclasses.
502
+
314
503
  def scanner_class
315
504
  StringScanner
316
505
  end unless instance_methods(false).map(&:to_s).include?("scanner_class")
317
506
 
507
+ ##
508
+ # Parse the given string.
509
+
318
510
  def parse str
319
511
  self.ss = scanner_class.new str
320
512
  % if option[:lineno] then
@@ -325,6 +517,9 @@ class OedipusLex
325
517
  do_parse
326
518
  end
327
519
 
520
+ ##
521
+ # Read in and parse the file at +path+.
522
+
328
523
  def parse_file path
329
524
  self.filename = path
330
525
  open path do |f|
@@ -332,6 +527,9 @@ class OedipusLex
332
527
  end
333
528
  end
334
529
 
530
+ ##
531
+ # The current location in the parse.
532
+
335
533
  def location
336
534
  [
337
535
  (filename || "<input>"),
@@ -346,6 +544,9 @@ class OedipusLex
346
544
  ].compact.join(":")
347
545
  end
348
546
 
547
+ ##
548
+ # Lex the next token.
549
+
349
550
  def next_token
350
551
  % starts.each do |s|
351
552
  <%= s %>
@@ -427,6 +628,8 @@ class OedipusLex
427
628
  end
428
629
  % end
429
630
  REX
631
+
632
+ # :startdoc:
430
633
  end
431
634
 
432
635
  if $0 == __FILE__ then
@@ -1,44 +1,80 @@
1
1
  # encoding: UTF-8
2
2
  #--
3
3
  # This file is automatically generated. Do not modify it.
4
- # Generated by: oedipus_lex version 2.4.1.
4
+ # Generated by: oedipus_lex version 2.5.0.
5
5
  # Source: lib/oedipus_lex.rex
6
6
  #++
7
7
 
8
+
9
+ ##
10
+ # The generated lexer OedipusLex
11
+
8
12
  class OedipusLex
9
13
  require 'strscan'
10
14
 
15
+ # :stopdoc:
11
16
  ST = /(?:(:\S+|\w+\??))/
12
17
  RE = /(\/(?:\\.|[^\/])+\/[ion]?)/
13
18
  ACT = /(\{.*|:?\w+)/
14
-
19
+ # :startdoc:
20
+ # :stopdoc:
15
21
  class LexerError < StandardError ; end
16
22
  class ScanError < LexerError ; end
23
+ # :startdoc:
24
+
25
+ ##
26
+ # The current line number.
17
27
 
18
28
  attr_accessor :lineno
29
+ ##
30
+ # The file name / path
31
+
19
32
  attr_accessor :filename
33
+
34
+ ##
35
+ # The StringScanner for this lexer.
36
+
20
37
  attr_accessor :ss
38
+
39
+ ##
40
+ # The current lexical state.
41
+
21
42
  attr_accessor :state
22
43
 
23
44
  alias :match :ss
24
45
 
46
+ ##
47
+ # The match groups for the current scan.
48
+
25
49
  def matches
26
50
  m = (1..9).map { |i| ss[i] }
27
51
  m.pop until m[-1] or m.empty?
28
52
  m
29
53
  end
30
54
 
55
+ ##
56
+ # Yields on the current action.
57
+
31
58
  def action
32
59
  yield
33
60
  end
34
61
 
62
+ ##
63
+ # The previous position. Only available if the :column option is on.
64
+
35
65
  attr_accessor :old_pos
36
66
 
67
+ ##
68
+ # The current column. Only available if the :column option is on.
69
+
37
70
  def column
38
71
  idx = ss.string.rindex("\n", old_pos) || -1
39
72
  old_pos - idx - 1
40
73
  end
41
74
 
75
+ ##
76
+ # Parse the file by getting all tokens and calling lex_+type+ on them.
77
+
42
78
  def do_parse
43
79
  while token = next_token do
44
80
  type, *vals = token
@@ -47,10 +83,17 @@ class OedipusLex
47
83
  end
48
84
  end
49
85
 
86
+
87
+ ##
88
+ # The current scanner class. Must be overridden in subclasses.
89
+
50
90
  def scanner_class
51
91
  StringScanner
52
92
  end unless instance_methods(false).map(&:to_s).include?("scanner_class")
53
93
 
94
+ ##
95
+ # Parse the given string.
96
+
54
97
  def parse str
55
98
  self.ss = scanner_class.new str
56
99
  self.lineno = 1
@@ -59,6 +102,9 @@ class OedipusLex
59
102
  do_parse
60
103
  end
61
104
 
105
+ ##
106
+ # Read in and parse the file at +path+.
107
+
62
108
  def parse_file path
63
109
  self.filename = path
64
110
  open path do |f|
@@ -66,6 +112,9 @@ class OedipusLex
66
112
  end
67
113
  end
68
114
 
115
+ ##
116
+ # The current location in the parse.
117
+
69
118
  def location
70
119
  [
71
120
  (filename || "<input>"),
@@ -74,6 +123,9 @@ class OedipusLex
74
123
  ].compact.join(":")
75
124
  end
76
125
 
126
+ ##
127
+ # Lex the next token.
128
+
77
129
  def next_token
78
130
 
79
131
  token = nil
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: oedipus_lex
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.5.0
4
+ version: 2.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Davis
@@ -10,9 +10,9 @@ bindir: bin
10
10
  cert_chain:
11
11
  - |
12
12
  -----BEGIN CERTIFICATE-----
13
- MIIDijCCAnKgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMRMwEQYDVQQDDApyeWFu
13
+ MIIDPjCCAiagAwIBAgIBAzANBgkqhkiG9w0BAQsFADBFMRMwEQYDVQQDDApyeWFu
14
14
  ZC1ydWJ5MRkwFwYKCZImiZPyLGQBGRYJemVuc3BpZGVyMRMwEQYKCZImiZPyLGQB
15
- GRYDY29tMB4XDTE2MDkyNjAxNTczNVoXDTE3MDkyNjAxNTczNVowRTETMBEGA1UE
15
+ GRYDY29tMB4XDTE4MTIwNDIxMzAxNFoXDTE5MTIwNDIxMzAxNFowRTETMBEGA1UE
16
16
  AwwKcnlhbmQtcnVieTEZMBcGCgmSJomT8ixkARkWCXplbnNwaWRlcjETMBEGCgmS
17
17
  JomT8ixkARkWA2NvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALda
18
18
  b9DCgK+627gPJkB6XfjZ1itoOQvpqH1EXScSaba9/S2VF22VYQbXU1xQXL/WzCkx
@@ -20,46 +20,51 @@ cert_chain:
20
20
  oOvjtt5P8+GSK9zLzxQP0gVLS/D0FmoE44XuDr3iQkVS2ujU5zZL84mMNqNB1znh
21
21
  GiadM9GHRaDiaxuX0cIUBj19T01mVE2iymf9I6bEsiayK/n6QujtyCbTWsAS9Rqt
22
22
  qhtV7HJxNKuPj/JFH0D2cswvzznE/a5FOYO68g+YCuFi5L8wZuuM8zzdwjrWHqSV
23
- gBEfoTEGr7Zii72cx+sCAwEAAaOBhDCBgTAJBgNVHRMEAjAAMAsGA1UdDwQEAwIE
24
- sDAdBgNVHQ4EFgQUR8V72Z3+v+2P9abCnL4wjx32T+EwIwYDVR0RBBwwGoEYcnlh
25
- bmQtcnVieUB6ZW5zcGlkZXIuY29tMCMGA1UdEgQcMBqBGHJ5YW5kLXJ1YnlAemVu
26
- c3BpZGVyLmNvbTANBgkqhkiG9w0BAQUFAAOCAQEAIGzgp0aZ2W9+v96ujmBcQHoC
27
- buy0iU68MVj2VlxMyfr1KPZIh1OyhU4UO4zrkREcH8ML70v9cYHNvOd9oynRHnvC
28
- l2tj/fD3YJ0AEkJxGrYwRWQmvMfC4bJ02bC1+rVOUIXXKp3+cUmiN4sTniof8VFo
29
- bo/YYP4c7erpERa+9hrqygg6WQbJlk2YRlH3JXPFjmu869i2dcbR5ZLOAeEy+axH
30
- E4oJcnPkJAr0rw504JGtlZtONZQblwmRJOIdXzolaE3NRGUzGVOUSptZppAKiavY
31
- fO6tdKQc/5RfA8oQEkg8hrxA5PQSz4TOFJGLpFvIapEk6tMruQ0bHgkhr9auXg==
23
+ gBEfoTEGr7Zii72cx+sCAwEAAaM5MDcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAw
24
+ HQYDVR0OBBYEFEfFe9md/r/tj/Wmwpy+MI8d9k/hMA0GCSqGSIb3DQEBCwUAA4IB
25
+ AQCbJwLmpJR2PomLU+Zzw3KRzH/hbyUWc/ftru71AopZ1fy4iY9J/BW5QYKVYwbP
26
+ V0FSBWtvfI/RdwfKGtuGhPKECZgmLieGuZ3XCc09qPu1bdg7i/tu1p0t0c6163ku
27
+ nDMDIC/t/DAFK0TY9I3HswuyZGbLW7rgF0DmiuZdN/RPhHq2pOLMLXJmFclCb/im
28
+ 9yToml/06TJdUJ5p64mkBs0TzaK66DIB1Smd3PdtfZqoRV+EwaXMdx0Hb3zdR1JR
29
+ Em82dBUFsipwMLCYj39kcyHWAxyl6Ae1Cn9r/ItVBCxoeFdrHjfavnrIEoXUt4bU
30
+ UfBugfLD19bu3nvL+zTAGx/U
32
31
  -----END CERTIFICATE-----
33
- date: 2016-11-30 00:00:00.000000000 Z
32
+ date: 2019-06-04 00:00:00.000000000 Z
34
33
  dependencies:
35
34
  - !ruby/object:Gem::Dependency
36
35
  name: rdoc
37
36
  requirement: !ruby/object:Gem::Requirement
38
37
  requirements:
39
- - - ~>
38
+ - - ">="
40
39
  - !ruby/object:Gem::Version
41
40
  version: '4.0'
41
+ - - "<"
42
+ - !ruby/object:Gem::Version
43
+ version: '7'
42
44
  type: :development
43
45
  prerelease: false
44
46
  version_requirements: !ruby/object:Gem::Requirement
45
47
  requirements:
46
- - - ~>
48
+ - - ">="
47
49
  - !ruby/object:Gem::Version
48
50
  version: '4.0'
51
+ - - "<"
52
+ - !ruby/object:Gem::Version
53
+ version: '7'
49
54
  - !ruby/object:Gem::Dependency
50
55
  name: hoe
51
56
  requirement: !ruby/object:Gem::Requirement
52
57
  requirements:
53
- - - ~>
58
+ - - "~>"
54
59
  - !ruby/object:Gem::Version
55
- version: '3.15'
60
+ version: '3.17'
56
61
  type: :development
57
62
  prerelease: false
58
63
  version_requirements: !ruby/object:Gem::Requirement
59
64
  requirements:
60
- - - ~>
65
+ - - "~>"
61
66
  - !ruby/object:Gem::Version
62
- version: '3.15'
67
+ version: '3.17'
63
68
  description: |-
64
69
  Oedipus Lex is a lexer generator in the same family as Rexical and
65
70
  Rex. Oedipus Lex is my independent lexer fork of Rexical. Rexical was
@@ -93,7 +98,7 @@ extra_rdoc_files:
93
98
  - README.rdoc
94
99
  - sample/error1.txt
95
100
  files:
96
- - .autotest
101
+ - ".autotest"
97
102
  - History.rdoc
98
103
  - Manifest.txt
99
104
  - README.rdoc
@@ -126,23 +131,22 @@ licenses:
126
131
  metadata: {}
127
132
  post_install_message:
128
133
  rdoc_options:
129
- - --main
134
+ - "--main"
130
135
  - README.rdoc
131
136
  require_paths:
132
137
  - lib
133
138
  required_ruby_version: !ruby/object:Gem::Requirement
134
139
  requirements:
135
- - - '>='
140
+ - - ">="
136
141
  - !ruby/object:Gem::Version
137
142
  version: '0'
138
143
  required_rubygems_version: !ruby/object:Gem::Requirement
139
144
  requirements:
140
- - - '>='
145
+ - - ">="
141
146
  - !ruby/object:Gem::Version
142
147
  version: '0'
143
148
  requirements: []
144
- rubyforge_project:
145
- rubygems_version: 2.4.5
149
+ rubygems_version: 3.0.2
146
150
  signing_key:
147
151
  specification_version: 4
148
152
  summary: Oedipus Lex is a lexer generator in the same family as Rexical and Rex
metadata.gz.sig CHANGED
Binary file