Why use a separate protocol description language?
Because we have a discription of a FSM in a FSM language rather than say C macros or templates we can do more than just generate code. In particular we can check definitional completeness, generate state transition diagrams, generate state description diagrams, generate simulations, perform/generate analysis, and produce different coding styles. In addition, a description language and implementation provides an educational framework for developers new to protocols.