antlr3 1.6.0 → 1.6.3
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.
- data/History.txt +8 -0
- data/Manifest.txt +94 -0
- data/README.txt +1 -1
- data/Rakefile +58 -0
- data/bin/antlr4ruby +101 -7
- data/java/antlr-full-3.2.1.jar +0 -0
- data/lib/antlr3.rb +38 -10
- data/lib/antlr3/constants.rb +13 -5
- data/lib/antlr3/debug.rb +57 -57
- data/lib/antlr3/dfa.rb +138 -68
- data/lib/antlr3/dot.rb +32 -32
- data/lib/antlr3/error.rb +85 -78
- data/lib/antlr3/main.rb +191 -187
- data/lib/antlr3/profile.rb +71 -70
- data/lib/antlr3/recognizers.rb +261 -226
- data/lib/antlr3/streams.rb +85 -84
- data/lib/antlr3/streams/interactive.rb +20 -27
- data/lib/antlr3/streams/rewrite.rb +89 -89
- data/lib/antlr3/task.rb +42 -33
- data/lib/antlr3/template.rb +2 -2
- data/lib/antlr3/template/group-lexer.rb +1 -1
- data/lib/antlr3/token.rb +76 -68
- data/lib/antlr3/tree.rb +125 -121
- data/lib/antlr3/tree/visitor.rb +1 -1
- data/lib/antlr3/tree/wizard.rb +1 -1
- data/lib/antlr3/util.rb +32 -33
- data/lib/antlr3/version.rb +3 -3
- data/templates/Ruby.stg +1 -1
- data/test/unit/test-streams.rb +11 -10
- data/test/unit/test-template.rb +206 -204
- metadata +4 -2
data/lib/antlr3/task.rb
CHANGED
@@ -61,7 +61,7 @@ class CompileTask < Rake::TaskLib
|
|
61
61
|
|
62
62
|
def grammar_set( *grammar_files )
|
63
63
|
grammar_files = [ grammar_files ].flatten!
|
64
|
-
options = @options.merge(
|
64
|
+
options = @options.merge(
|
65
65
|
Hash === grammar_files.last ? grammar_files.pop : {}
|
66
66
|
)
|
67
67
|
set = GrammarSet.new( grammar_files, options )
|
@@ -71,18 +71,18 @@ class CompileTask < Rake::TaskLib
|
|
71
71
|
end
|
72
72
|
|
73
73
|
def compile_task
|
74
|
-
full_name = ( @namespace + [ @name, 'compile' ] ).join(':')
|
74
|
+
full_name = ( @namespace + [ @name, 'compile' ] ).join( ':' )
|
75
75
|
Rake::Task[ full_name ]
|
76
76
|
end
|
77
77
|
|
78
78
|
def clobber_task
|
79
|
-
full_name = ( @namespace + [ @name, 'clobber' ] ).join(':')
|
79
|
+
full_name = ( @namespace + [ @name, 'clobber' ] ).join( ':' )
|
80
80
|
Rake::Task[ full_name ]
|
81
81
|
end
|
82
82
|
|
83
83
|
def define
|
84
84
|
namespace( @name ) do
|
85
|
-
desc( "trash all ANTLR-generated source code")
|
85
|
+
desc( "trash all ANTLR-generated source code" )
|
86
86
|
task( 'clobber' ) do
|
87
87
|
for set in @grammar_sets
|
88
88
|
set.clean
|
@@ -129,12 +129,12 @@ class CompileTask::GrammarSet
|
|
129
129
|
@compile_options =
|
130
130
|
case opts = options[ :compile_options ]
|
131
131
|
when Array then opts
|
132
|
-
else Shellwords.
|
132
|
+
else Shellwords.shellwords( opts.to_s )
|
133
133
|
end
|
134
134
|
@java_options =
|
135
135
|
case opts = options[ :java_options ]
|
136
136
|
when Array then opts
|
137
|
-
else Shellwords.
|
137
|
+
else Shellwords.shellwords( opts.to_s )
|
138
138
|
end
|
139
139
|
end
|
140
140
|
|
@@ -201,24 +201,33 @@ class CompileTask::GrammarSet
|
|
201
201
|
parts << '-trace' if @trace
|
202
202
|
parts.concat( @compile_options )
|
203
203
|
parts << grammar.path
|
204
|
-
return
|
204
|
+
return parts.map! { | t | escape( t ) }.join( ' ' )
|
205
205
|
end
|
206
|
+
|
207
|
+
def escape( token )
|
208
|
+
token = token.to_s.dup
|
209
|
+
token.empty? and return( %('') )
|
210
|
+
token.gsub!( /([^A-Za-z0-9_\-.,:\/@\n])/n, "\\\\\\1" )
|
211
|
+
token.gsub!( /\n/, "'\n'" )
|
212
|
+
return( token )
|
213
|
+
end
|
214
|
+
|
206
215
|
end
|
207
216
|
|
208
217
|
class GrammarFile
|
209
|
-
LANGUAGES = {
|
210
|
-
"ActionScript" => [".as"],
|
211
|
-
"CSharp2" => [".cs"],
|
212
|
-
"C" => [".c", ".h"],
|
213
|
-
"ObjC" => [".m", ".h"],
|
214
|
-
"CSharp3" => [".cs"],
|
215
|
-
"Cpp" => [".cpp", ".h"],
|
216
|
-
"Ruby" => [".rb"],
|
217
|
-
"Java" => [".java"],
|
218
|
-
"JavaScript" => [".js"],
|
219
|
-
"Python" => [".py"],
|
220
|
-
"Delphi" => [".pas"],
|
221
|
-
"Perl5" => [".pm"]
|
218
|
+
LANGUAGES = {
|
219
|
+
"ActionScript" => [ ".as" ],
|
220
|
+
"CSharp2" => [ ".cs" ],
|
221
|
+
"C" => [ ".c", ".h" ],
|
222
|
+
"ObjC" => [ ".m", ".h" ],
|
223
|
+
"CSharp3" => [ ".cs" ],
|
224
|
+
"Cpp" => [ ".cpp", ".h" ],
|
225
|
+
"Ruby" => [ ".rb" ],
|
226
|
+
"Java" => [ ".java" ],
|
227
|
+
"JavaScript" => [ ".js" ],
|
228
|
+
"Python" => [ ".py" ],
|
229
|
+
"Delphi" => [ ".pas" ],
|
230
|
+
"Perl5" => [ ".pm" ]
|
222
231
|
}.freeze
|
223
232
|
GRAMMAR_TYPES = %w(lexer parser tree combined)
|
224
233
|
|
@@ -305,7 +314,7 @@ class GrammarFile
|
|
305
314
|
targets = [ tokens_file ]
|
306
315
|
|
307
316
|
for target_type in %w( lexer parser tree_parser )
|
308
|
-
for file in self.send( :"#{ target_type }_files")
|
317
|
+
for file in self.send( :"#{ target_type }_files" )
|
309
318
|
targets << file
|
310
319
|
end
|
311
320
|
end
|
@@ -395,7 +404,7 @@ private
|
|
395
404
|
@token_vocab = $1
|
396
405
|
end
|
397
406
|
|
398
|
-
@source.scan(/^\s*import\s+(\w+\s*(?:,\s*\w+\s*)*);/) do
|
407
|
+
@source.scan( /^\s*import\s+(\w+\s*(?:,\s*\w+\s*)*);/ ) do
|
399
408
|
list = $1.strip
|
400
409
|
@imports.concat( list.split( /\s*,\s*/ ) )
|
401
410
|
end
|
@@ -435,33 +444,33 @@ end
|
|
435
444
|
class GrammarFile::FormatError < StandardError
|
436
445
|
attr_reader :file, :source
|
437
446
|
|
438
|
-
def self.[](*args)
|
439
|
-
new(*args)
|
447
|
+
def self.[]( *args )
|
448
|
+
new( *args )
|
440
449
|
end
|
441
450
|
|
442
|
-
def initialize(source, file = nil)
|
451
|
+
def initialize( source, file = nil )
|
443
452
|
@file = file
|
444
453
|
@source = source
|
445
454
|
message = ''
|
446
455
|
if file.nil? # inline
|
447
456
|
message << "bad inline grammar source:\n"
|
448
|
-
message << ("-" * 80) << "\n"
|
457
|
+
message << ( "-" * 80 ) << "\n"
|
449
458
|
message << @source
|
450
|
-
message[-1] == ?\n or message << "\n"
|
451
|
-
message << ("-" * 80) << "\n"
|
459
|
+
message[ -1 ] == ?\n or message << "\n"
|
460
|
+
message << ( "-" * 80 ) << "\n"
|
452
461
|
message << "could not locate a grammar name and type declaration matching\n"
|
453
462
|
message << "/^\s*(lexer|parser|tree)?\s*grammar\s*(\S+)\s*;/"
|
454
463
|
else
|
455
464
|
message << 'bad grammar source in file %p' % @file
|
456
|
-
message << ("-" * 80) << "\n"
|
465
|
+
message << ( "-" * 80 ) << "\n"
|
457
466
|
message << @source
|
458
|
-
message[-1] == ?\n or message << "\n"
|
459
|
-
message << ("-" * 80) << "\n"
|
467
|
+
message[ -1 ] == ?\n or message << "\n"
|
468
|
+
message << ( "-" * 80 ) << "\n"
|
460
469
|
message << "could not locate a grammar name and type declaration matching\n"
|
461
470
|
message << "/^\s*(lexer|parser|tree)?\s*grammar\s*(\S+)\s*;/"
|
462
471
|
end
|
463
|
-
super(message)
|
472
|
+
super( message )
|
464
473
|
end
|
465
474
|
end # error Grammar::FormatError
|
466
475
|
end # class CompileTask
|
467
|
-
end # module ANTLR3
|
476
|
+
end # module ANTLR3
|
data/lib/antlr3/template.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
#!/usr/bin/ruby
|
2
|
-
|
2
|
+
|
3
3
|
|
4
4
|
require 'erb'
|
5
5
|
require 'antlr3'
|
@@ -237,7 +237,7 @@ class Context
|
|
237
237
|
|
238
238
|
def method_missing( method, *args )
|
239
239
|
case name = method.to_s
|
240
|
-
when SETTER_FORM then return( self[ $1 ] =
|
240
|
+
when SETTER_FORM then return( self[ $1 ] = args.first )
|
241
241
|
when ATTR_FORM
|
242
242
|
args.empty? and has_ivar?( name ) and return( self[ name ] )
|
243
243
|
end
|
data/lib/antlr3/token.rb
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
=begin LICENSE
|
5
5
|
|
6
6
|
[The "BSD licence"]
|
7
|
-
Copyright (c) 2009 Kyle Yetter
|
7
|
+
Copyright (c) 2009-2010 Kyle Yetter
|
8
8
|
All rights reserved.
|
9
9
|
|
10
10
|
Redistribution and use in source and binary forms, with or without
|
@@ -115,7 +115,7 @@ module Token
|
|
115
115
|
index <=> tk2.index
|
116
116
|
end
|
117
117
|
|
118
|
-
def initialize_copy(orig)
|
118
|
+
def initialize_copy( orig )
|
119
119
|
self.index = -1
|
120
120
|
self.type = orig.type
|
121
121
|
self.channel = orig.channel
|
@@ -136,7 +136,7 @@ module Token
|
|
136
136
|
end
|
137
137
|
|
138
138
|
def name
|
139
|
-
token_name(type)
|
139
|
+
token_name( type )
|
140
140
|
end
|
141
141
|
|
142
142
|
def hidden?
|
@@ -144,7 +144,7 @@ module Token
|
|
144
144
|
end
|
145
145
|
|
146
146
|
def source_text
|
147
|
-
concrete? ? input.substring(start, stop) : text
|
147
|
+
concrete? ? input.substring( start, stop ) : text
|
148
148
|
end
|
149
149
|
|
150
150
|
def hide!
|
@@ -165,30 +165,30 @@ module Token
|
|
165
165
|
|
166
166
|
def inspect
|
167
167
|
text_inspect = text ? '[%p] ' % text : ' '
|
168
|
-
text_position = line != 0 ? '@ line %s col %s ' % [line, column] : ''
|
169
|
-
stream_position = start ? '(%s..%s)' % [start, stop] : ''
|
168
|
+
text_position = line != 0 ? '@ line %s col %s ' % [ line, column ] : ''
|
169
|
+
stream_position = start ? '(%s..%s)' % [ start, stop ] : ''
|
170
170
|
|
171
171
|
front = index != -1 ? index.to_s << ' ' : ''
|
172
172
|
rep = front << name << text_inspect <<
|
173
173
|
text_position << stream_position
|
174
174
|
rep.strip!
|
175
|
-
channel == DEFAULT_CHANNEL or rep << " (#{channel.to_s})"
|
176
|
-
return(rep)
|
175
|
+
channel == DEFAULT_CHANNEL or rep << " (#{ channel.to_s })"
|
176
|
+
return( rep )
|
177
177
|
end
|
178
178
|
|
179
|
-
def pretty_print(printer)
|
179
|
+
def pretty_print( printer )
|
180
180
|
printer.text( inspect )
|
181
181
|
end
|
182
182
|
|
183
183
|
private
|
184
184
|
|
185
|
-
def token_name(type)
|
186
|
-
BUILT_IN_TOKEN_NAMES[type]
|
185
|
+
def token_name( type )
|
186
|
+
BUILT_IN_TOKEN_NAMES[ type ]
|
187
187
|
end
|
188
188
|
end
|
189
189
|
|
190
|
-
CommonToken = Struct.new(:type, :channel, :text, :input, :start,
|
191
|
-
:stop, :index, :line, :column)
|
190
|
+
CommonToken = Struct.new( :type, :channel, :text, :input, :start,
|
191
|
+
:stop, :index, :line, :column )
|
192
192
|
|
193
193
|
=begin rdoc ANTLR3::CommonToken
|
194
194
|
|
@@ -219,36 +219,38 @@ Here is the token structure attribute list in order:
|
|
219
219
|
|
220
220
|
class CommonToken
|
221
221
|
include Token
|
222
|
-
DEFAULT_VALUES = {
|
222
|
+
DEFAULT_VALUES = {
|
223
223
|
:channel => DEFAULT_CHANNEL,
|
224
224
|
:index => -1,
|
225
225
|
:line => 0,
|
226
226
|
:column => -1
|
227
227
|
}.freeze
|
228
228
|
|
229
|
-
def self.token_name(type)
|
230
|
-
BUILT_IN_TOKEN_NAMES[type]
|
229
|
+
def self.token_name( type )
|
230
|
+
BUILT_IN_TOKEN_NAMES[ type ]
|
231
231
|
end
|
232
232
|
|
233
|
-
def self.create(fields = {})
|
234
|
-
fields = DEFAULT_VALUES.merge(fields)
|
235
|
-
args = members.map { |name| fields[name.to_sym] }
|
236
|
-
new(*args)
|
233
|
+
def self.create( fields = {} )
|
234
|
+
fields = DEFAULT_VALUES.merge( fields )
|
235
|
+
args = members.map { |name| fields[ name.to_sym ] }
|
236
|
+
new( *args )
|
237
237
|
end
|
238
238
|
|
239
239
|
# allows you to make a copy of a token with a different class
|
240
|
-
def self.from_token(token)
|
241
|
-
new(
|
242
|
-
|
240
|
+
def self.from_token( token )
|
241
|
+
new(
|
242
|
+
token.type, token.channel, token.text ? token.text.clone : nil,
|
243
|
+
token.input, token.start, token.stop, -1, token.line, token.column
|
244
|
+
)
|
243
245
|
end
|
244
246
|
|
245
|
-
def initialize(type = nil, channel = DEFAULT_CHANNEL, text = nil,
|
247
|
+
def initialize( type = nil, channel = DEFAULT_CHANNEL, text = nil,
|
246
248
|
input = nil, start = nil, stop = nil, index = -1,
|
247
|
-
line = 0, column = -1)
|
249
|
+
line = 0, column = -1 )
|
248
250
|
super
|
249
|
-
block_given? and yield(self)
|
251
|
+
block_given? and yield( self )
|
250
252
|
self.text.nil? && self.start && self.stop and
|
251
|
-
self.text = self.input.substring(self.start, self.stop)
|
253
|
+
self.text = self.input.substring( self.start, self.stop )
|
252
254
|
end
|
253
255
|
|
254
256
|
alias :input_stream :input
|
@@ -257,9 +259,15 @@ class CommonToken
|
|
257
259
|
alias :token_index= :index=
|
258
260
|
end
|
259
261
|
|
260
|
-
Constants
|
261
|
-
|
262
|
-
|
262
|
+
module Constants
|
263
|
+
|
264
|
+
# End of File / End of Input character and token type
|
265
|
+
EOF_TOKEN = CommonToken.new( EOF ).freeze
|
266
|
+
INVALID_TOKEN = CommonToken.new( INVALID_TOKEN_TYPE ).freeze
|
267
|
+
SKIP_TOKEN = CommonToken.new( INVALID_TOKEN_TYPE ).freeze
|
268
|
+
end
|
269
|
+
|
270
|
+
|
263
271
|
|
264
272
|
=begin rdoc ANTLR3::TokenSource
|
265
273
|
|
@@ -285,7 +293,7 @@ module TokenSource
|
|
285
293
|
return token
|
286
294
|
end
|
287
295
|
|
288
|
-
def to_stream(options = {})
|
296
|
+
def to_stream( options = {} )
|
289
297
|
if block_given?
|
290
298
|
CommonTokenStream.new( self, options ) { | t, stream | yield( t, stream ) }
|
291
299
|
else
|
@@ -294,7 +302,7 @@ module TokenSource
|
|
294
302
|
end
|
295
303
|
|
296
304
|
def each
|
297
|
-
block_given? or return enum_for(:each)
|
305
|
+
block_given? or return enum_for( :each )
|
298
306
|
loop { yield( self.next ) }
|
299
307
|
rescue StopIteration
|
300
308
|
return self
|
@@ -326,13 +334,13 @@ module TokenFactory
|
|
326
334
|
end
|
327
335
|
end
|
328
336
|
|
329
|
-
def create_token(*args)
|
337
|
+
def create_token( *args )
|
330
338
|
if block_given?
|
331
|
-
token_class.new(*args) do |*targs|
|
332
|
-
yield(*targs)
|
339
|
+
token_class.new( *args ) do |*targs|
|
340
|
+
yield( *targs )
|
333
341
|
end
|
334
342
|
else
|
335
|
-
token_class.new(*args)
|
343
|
+
token_class.new( *args )
|
336
344
|
end
|
337
345
|
end
|
338
346
|
end
|
@@ -467,9 +475,9 @@ dynamically-created CommonToken subclass.
|
|
467
475
|
class TokenScheme < ::Module
|
468
476
|
include TokenFactory
|
469
477
|
|
470
|
-
def self.new(tk_class = nil, &body)
|
478
|
+
def self.new( tk_class = nil, &body )
|
471
479
|
super() do
|
472
|
-
tk_class ||= Class.new(::ANTLR3::CommonToken)
|
480
|
+
tk_class ||= Class.new( ::ANTLR3::CommonToken )
|
473
481
|
self.token_class = tk_class
|
474
482
|
|
475
483
|
const_set( :TOKEN_NAMES, ::ANTLR3::Constants::BUILT_IN_TOKEN_NAMES.clone )
|
@@ -484,14 +492,14 @@ class TokenScheme < ::Module
|
|
484
492
|
begin
|
485
493
|
token_names[ type ] or super
|
486
494
|
rescue NoMethodError
|
487
|
-
::ANTLR3::CommonToken.token_name(type)
|
495
|
+
::ANTLR3::CommonToken.token_name( type )
|
488
496
|
end
|
489
497
|
end
|
490
498
|
module_function :token_name, :token_names
|
491
499
|
|
492
500
|
include ANTLR3::Constants
|
493
501
|
|
494
|
-
body and module_eval(&body)
|
502
|
+
body and module_eval( &body )
|
495
503
|
end
|
496
504
|
end
|
497
505
|
|
@@ -513,16 +521,16 @@ class TokenScheme < ::Module
|
|
513
521
|
end
|
514
522
|
|
515
523
|
|
516
|
-
def included(mod)
|
524
|
+
def included( mod )
|
517
525
|
super
|
518
|
-
mod.extend(self)
|
526
|
+
mod.extend( self )
|
519
527
|
end
|
520
528
|
private :included
|
521
529
|
attr_reader :unused, :types
|
522
530
|
|
523
531
|
def define_tokens( token_map = {} )
|
524
532
|
for token_name, token_value in token_map
|
525
|
-
define_token(token_name, token_value)
|
533
|
+
define_token( token_name, token_value )
|
526
534
|
end
|
527
535
|
return self
|
528
536
|
end
|
@@ -535,9 +543,9 @@ class TokenScheme < ::Module
|
|
535
543
|
# raise an error unless value is the same as the current value
|
536
544
|
value ||= current_value
|
537
545
|
unless current_value == value
|
538
|
-
raise NameError.new(
|
539
|
-
"new token type definition ``#{name} = #{value}'' conflicts " <<
|
540
|
-
"with existing type definition ``#{name} = #{current_value}''", name
|
546
|
+
raise NameError.new(
|
547
|
+
"new token type definition ``#{ name } = #{ value }'' conflicts " <<
|
548
|
+
"with existing type definition ``#{ name } = #{ current_value }''", name
|
541
549
|
)
|
542
550
|
end
|
543
551
|
else
|
@@ -556,58 +564,58 @@ class TokenScheme < ::Module
|
|
556
564
|
return self
|
557
565
|
end
|
558
566
|
|
559
|
-
def register_names(*names)
|
567
|
+
def register_names( *names )
|
560
568
|
if names.length == 1 and Hash === names.first
|
561
569
|
names.first.each do |value, name|
|
562
|
-
register_name(value, name)
|
570
|
+
register_name( value, name )
|
563
571
|
end
|
564
572
|
else
|
565
573
|
names.each_with_index do |name, i|
|
566
574
|
type_value = Constants::MIN_TOKEN_TYPE + i
|
567
|
-
register_name(type_value, name)
|
575
|
+
register_name( type_value, name )
|
568
576
|
end
|
569
577
|
end
|
570
578
|
end
|
571
579
|
|
572
580
|
def register_name( type_value, name )
|
573
581
|
name = name.to_s.freeze
|
574
|
-
if token_names.has_key?(type_value)
|
575
|
-
current_name = token_names[type_value]
|
582
|
+
if token_names.has_key?( type_value )
|
583
|
+
current_name = token_names[ type_value ]
|
576
584
|
current_name == name and return name
|
577
585
|
|
578
586
|
if current_name == "T__#{ type_value }"
|
579
587
|
# only an anonymous name is registered -- upgrade the name to the full literal name
|
580
|
-
token_names[type_value] = name
|
581
|
-
elsif name == "T__#{type_value}"
|
588
|
+
token_names[ type_value ] = name
|
589
|
+
elsif name == "T__#{ type_value }"
|
582
590
|
# ignore name downgrade from literal to anonymous constant
|
583
591
|
return current_name
|
584
592
|
else
|
585
|
-
error = NameError.new(
|
586
|
-
"attempted assignment of token type #{type_value}" <<
|
587
|
-
" to name #{name} conflicts with existing name #{current_name}", name
|
593
|
+
error = NameError.new(
|
594
|
+
"attempted assignment of token type #{ type_value }" <<
|
595
|
+
" to name #{ name } conflicts with existing name #{ current_name }", name
|
588
596
|
)
|
589
597
|
raise error
|
590
598
|
end
|
591
599
|
else
|
592
|
-
token_names[type_value] = name.to_s.freeze
|
600
|
+
token_names[ type_value ] = name.to_s.freeze
|
593
601
|
end
|
594
602
|
end
|
595
603
|
|
596
|
-
def built_in_type?(type_value)
|
597
|
-
Constants::BUILT_IN_TOKEN_NAMES.fetch(type_value, false) and true
|
604
|
+
def built_in_type?( type_value )
|
605
|
+
Constants::BUILT_IN_TOKEN_NAMES.fetch( type_value, false ) and true
|
598
606
|
end
|
599
607
|
|
600
|
-
def token_defined?(name_or_value)
|
608
|
+
def token_defined?( name_or_value )
|
601
609
|
case value
|
602
|
-
when Integer then token_names.has_key?(name_or_value)
|
603
|
-
else const_defined?(name_or_value.to_s)
|
610
|
+
when Integer then token_names.has_key?( name_or_value )
|
611
|
+
else const_defined?( name_or_value.to_s )
|
604
612
|
end
|
605
613
|
end
|
606
614
|
|
607
|
-
def [](name_or_value)
|
615
|
+
def []( name_or_value )
|
608
616
|
case name_or_value
|
609
|
-
when Integer then token_names.fetch(name_or_value, nil)
|
610
|
-
else const_get(name_or_value.to_s) rescue token_names.index(name_or_value)
|
617
|
+
when Integer then token_names.fetch( name_or_value, nil )
|
618
|
+
else const_get( name_or_value.to_s ) rescue token_names.index( name_or_value )
|
611
619
|
end
|
612
620
|
end
|
613
621
|
|
@@ -615,10 +623,10 @@ class TokenScheme < ::Module
|
|
615
623
|
self::Token
|
616
624
|
end
|
617
625
|
|
618
|
-
def token_class=(klass)
|
619
|
-
Class === klass or raise(TypeError, "token_class must be a Class")
|
626
|
+
def token_class=( klass )
|
627
|
+
Class === klass or raise( TypeError, "token_class must be a Class" )
|
620
628
|
Util.silence_warnings do
|
621
|
-
klass < self or klass.send(:include, self)
|
629
|
+
klass < self or klass.send( :include, self )
|
622
630
|
const_set( :Token, klass )
|
623
631
|
end
|
624
632
|
end
|