NLU with hand-crafted grammars
Designing a grammar involves predicting the different things the user might say and creating rules to cover them. Grammar design is an iterative process of creating an initial grammar, collecting data to test the grammar against actual user input, adding some phrases and removing others, and so on until the coverage of the grammar is as complete as possible. There are various tools to help with the design of grammars. For example, Nuance provides the Nuance Grammar Builder which can be used to test the coverage of a grammar, to check that the test phrases receive the correct semantic interpretation, and to test for over-generation that is, detect any unnecessary or unexpected phrases in the input (http://evolution.voxeo.com/library/grammar/grammar-gsl.pdf).
There are different languages for specifying speech grammars, the most popular are XML and Augmented BNF (ABNF), defined by W3C available at http://www.w3.org/TR/speech-grammar/, Java Script Grammar Format...