You use the symbol in grammar rules to mean that a token in that class is allowed. The symbol is represented in the Bison parser by a numeric code, and the yylex function returns a token type code to indicate what kind of token has been read. A nonterminal symbol stands for a class of syntactically equivalent groupings. The symbol name is used in writing grammar rules. By convention, it should be all lower case.
Periods make sense only in nonterminals.
By convention, it should be all upper case. See Token Decl . By convention, a character token type is used only to represent a token that consists of that particular character. Nothing enforces this convention, but if you depart from it, your program will confuse other readers. How you choose to write a terminal symbol has no effect on its grammatical meaning.