def token( name, &block )
class_eval &block
raise unless instance_methods.include?( MATCH )
alias_method( "#{name}_#{MATCH}", :match )
remove_method( MATCH )
unit = !instance_methods.include?('end_match')
tokenIsUnit?[name.to_sym] = unit
unless unit
alias_method( "#{name}_#{ENDMATCH}", ENDMATCH )
remove_method( ENDMATCH )
end
if instance_methods.include?('callback')
alias_method( "#{name}_#{CALLBACK}", CALLBACK )
remove_method( CALLBACK )
end
if instance_methods.include?('end_callback')
alias_method( "#{name}_#{ENDCALLBACK}", ENDCALLBACK )
remove_method( ENDCALLBACK )
end
warn "WARNING! redefining token" if tokens.include?( name )
tokens << name
end