oedipus_lex 2.5.0 → 2.5.1

Sign up to get free protection for your applications and to get access to all the features.
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