I have been having some fun lately exploring the development of language parsers in the context of how they fit into the Chomsky Hierarchy.
What is a good real-world (ie not theoretical) example of a context-sensitive grammar?
Good question. Although as mentioned in the comments very many programming languages are context-sensitive, that context-sensitivity is often not resolved in the parsing phase but in later phases -- that is, a superset of the language is parsed using a context-free grammar, and some of those parse trees are later filtered out.
However, that does not mean that those languages aren't context-sensitive, so here are some examples:
Haskell allows you to define functions that are used as operators, and to also define the the precedence and associativity of those operators. In other words, you can't build the correct parse tree for an operator expression like:
unless you've already parsed the precedence/associativity declarations for
A second example is of some data language that consisted of an integer followed by that number of characters, for example:
Unfortunately, I can't remember what the name of this format is; I thought it had something to do with images. Can anybody help me???
The issue with this format is that it's pretty much impossible to parse without something context-sensitive, because the only way to figure out the "field" sizes is by ... parsing the string.
A third example is XML: opening tag names must have matching close tags:
As long as I know, context-sensitive grammars are used in natural language processing, only. Programming languages interpreters and compilers do not try to parse a context-free grammar because of complexity (even if some attempt has been done in the past).
Maybe, you can find some example of real use in one of these libraries: