The way to do this would be with a reader macro. As others have pointed out, you need to get access to the raw characters in the input stream before the standard reader fiddles with them. Thus, a standard macro won't be enough since it's always invoked after the reader has done its job. Fortunately, Common Lisp comes to the rescue with the right hooks.