a parser (or compiler) usually comprises of a tokenizer, which recognizes certain token-types in the series of symbols from the alphabet which is the input.
Such that our parser only reads a stream of tokens. Not raw characters.
On a grammatical tier however, one speaks of Terminals and Nonterminals. But not tokens.
Which means that both the grammar and the stack (let's assume we are using a LL(k) or a LR-family parser) consist of Terminals and Nonterminals. But let's also assume that it makes sense, to use, likewise when speaking of symbols from a grammatical point of view, the token-types for terminal-symbols as well.
Is there a convention on how to represent grammar symbols (terminals, especially) and are the terminals normally "typed" ?
My guess would be multiple inheritance of interfaces - yet there is only one class TokenType, such that an interface wouldn't really make any sense. With IGrammarSymbol you have at least two classes, Terminal and Nonterminal, which can implement that interface.
Sincerely yours