Method: ANTLR3::TokenScheme#define_token

Defined in:
lib/antlr3/token.rb

#define_token(name, value = nil) ⇒ Object



572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
# File 'lib/antlr3/token.rb', line 572

def define_token( name, value = nil )
  name = name.to_s
  
  if current_value = @types[ name ]
    # token type has already been defined
    # raise an error unless value is the same as the current value
    value ||= current_value
    unless current_value == value
      raise NameError.new( 
        "new token type definition ``#{ name } = #{ value }'' conflicts " <<
        "with existing type definition ``#{ name } = #{ current_value }''", name
      )
    end
  else
    value ||= @unused
    if name =~ /^[A-Z]\w*$/
      const_set( name, @types[ name ] = value )
    else
      constant = "T__#{ value }"
      const_set( constant, @types[ constant ] = value )
      @types[ name ] = value
    end
    register_name( value, name ) unless built_in_type?( value )
  end
  
  value >= @unused and @unused = value + 1
  return self
end