|  A parser is an object that recognizes the elements of a language and translates each element into a meaningful result. A language is a set of strings, and we usually have some way of describing a language as containing all the strings that match a pattern. A fundamental ability of a parser is the ability to declare whether or not a given string belongs to a language. Consider the following language:   {"hot coffee",   "steaming coffee",  "hot hot hot coffee",  "hot hot steaming hot coffee",  ...}  This language contains all strings that begin with some sequence of  "hot"  and  "steaming"  and end with  "coffee"  . A parser for this language is an object that can recognize whether or not a given string is an element of this language. For example, this parser will be able to determine that the following is a member of the language:   "hot hot hot steaming hot steaming hot coffee"   whereas the following is not:   "lukewarm coffee"   Every parser defines a language ”the language that is the set of all strings that the parser recognizes. Notice that such sets are usually infinite. In practice, you never create a set that contains all the members of a language. Rather, you construct parsers to match patterns of text.   To create a new language you create a new parser object, and this means that you need a  Parser  class. This class does not operate alone; it collaborates with two other classes.  |