12.9 Reader Extension
Racket’s reader can be extended in three ways: through a reader-macro procedure in a readtable (see Readtables), through a #reader form (see Reading via an Extension), or through a custom-port byte reader that returns a “special” result procedure (see Custom Ports). All three kinds of reader extension procedures accept similar arguments, and their results are treated in the same way by read and read-syntax (or, more precisely, by the default read handler; see port-read-handler).