You can create a grammar for the coffee data language by applying the following algorithm:
Define the parser you want as a composite of subparsers.
Repeat step 1 until every subparser is defined or is a terminal.
The parser you want to define is
From the preceding language element, you can see that a coffee description is, at a high level, the following:
coffee = name ',' roast ',' country ',' price;
A coffee's name is a word followed optionally by a former name. The former name is a word in parentheses.
name = Word (formerName Empty); formerName = '(' Word ')';
The roast is a word followed optionally by the characters /French :
roast = Word (orFrench Empty); orFrench = '/' "french";
The country is just a word, and the price is just a number:
country = Word; price = Num;
You can translate this grammar directly to code using the rules in Section 3.6 "Translating a Grammar to Code." When you write the parser, you will want to plug in your assemblers, a subject we will address shortly.