EOF is a terminal, marking the end of the input stream. It must not be used in the client grammar. Some parsers may prohibit the inclusion of this symbol in the input stream, others may require it, and others may require an infinite stream of them at the end of the input.
In addition, the empty string and -1 are reserved as symbols by the system.
Note: this is ugly. We should use a class, but the repr() of a class is ugly.