Of course your grammar should be general enough to handle sentences other than these, but it should not generate or parse sentences like the following.
generate which generates a sentence
from the grammar.
Starting with the S network, it traverses the network,
randomly selecting a transition out of a state when there is more
than one.
When a transition with a phrasal category label (such as NP)
is selected, the program recursively traverses the network for that category,
returning to the higher network when it is done.
The output of the program should be a structured representation of a
sentence, for example, for A doctor slept:
(s (np (det a) (n doctor)) (vp (iv slept)))
((cat n) ...).
In your NP network, include features that handle number agreement between
determiners and nouns.
Your grammar should generate phrases like a doctor, some teachers,
and the doctors, but not generate phrases like a doctors
and some teacher.
Det and N).
Don't bother dealing with features for phrasal categories (NP, S, etc.).