Chris' Notes
This reminds me of some tools that use recognition grammar in speech recognition - see for example http://cmusphinx.sf.net/ - open source java speech recognition - although i can't find a good reference now to the grammars part :-(. Basically you can define a limited set of BNF grammars around a domain, and use those to drive a recognizer. And BNF grammars are easy to parse.
This means you can build up a rich grammar of english-like sentences taht the system can 'understand'
For example, consider a simple grammar for the generic story:
story ::= 'as 'a' <role> 'i would like' <thing> 'so that' <business_value>
you can narrow this by specifying some of the parts in more detail:
role ::= 'User' | 'Administrator' | 'Auditor'
This approach would be more interesting where there is a domain language already for the users. This is more comon than you might think. For example, in trading there is a very specific way in which a put or call is described. It goes something like this (see the very end of this page: http://www.margrabe.com/Dictionary/DictionaryUZ.html) although i can't remember the exact syntax:
bid := <number> 'bid' 'at' <amount_per_trade>
offer := 'put' <number> 'at' <amount_per_trade>
eg: 6 bid at 7
So then you can build up a language that is rigourously defined but still understandable to the domain specialist.
It is my suspicion that these kind of mini grammars are very very common if we only realise it. Think of leasing for example (and again my terrible memory fails me):
Create an Operating Lease with starting date 1 April 2005. Add 3 assets.
Advance system date to 25 April.
Change lease status to Terminated.
create-lease := 'create' ( 'a' | 'an' ) ( 'OL' | 'DFL' )
(with <property-setting> ('and' <property-setting>)).
change-property := ('advance' | 'change') ('lease' | 'system')
<property-name> to <new-value>
property-setting := <property-name> <property-value>