Noncontracting grammar
- 2 min read
- 3 chapters
Related on Lably
Through String (computer science)
A context-sensitive grammar is a noncontracting grammar in which all rules are of the form αAβ → αγβ, where A is a nonterminal, and γ is a nonempty string of nonterminal and/or terminal symbols.
However, some authors use the term context-sensitive grammar to refer to noncontracting grammars in general.
A noncontracting grammar in which |α| < |β| for all rules is called a growing context-sensitive grammar.
History
Chomsky (1959) introduced the Chomsky hierarchy, in which context-sensitive grammars occur as "type 1" grammars; general noncontracting grammars do not occur.
Chomsky (1963) calls a noncontracting grammar a "type 1 grammar", and a context-sensitive grammar a "type 2 grammar", and by presenting a conversion from the former into the latter, proves the two weakly equivalent .
Kuroda (1964) introduced Kuroda normal form, into which all noncontracting grammars can be converted.
Sign in to keep reading
2 more chapters are free with a Lably account.
Example
This grammar, with the start symbol S, generates the language { anbncn : n ≥ 1 }, which is not context-free due to the pumping lemma.
A context-sensitive grammar for the same language is shown below.
Expressive power
Every context-sensitive grammar is a noncontracting grammar.
There are easy procedures for
- bringing any noncontracting grammar into Kuroda normal form, and
- converting any noncontracting grammar in Kuroda normal form into a context-sensitive grammar.
Hence, these three types of grammar are equal in expressive power, all describing exactly the context-sensitive languages that do not include the empty string; the essentially noncontracting grammars describe exactly the set of context-sensitive languages.
A direct conversion
A direct conversion into context-sensitive grammars, avoiding Kuroda normal form:
For an arbitrary noncontracting grammar (N, Σ, P, S), construct the context-sensitive grammar (N’, Σ, P’, S) as follows:
- For every terminal symbol a ∈ Σ, introduce a new nonterminal symbol [a] ∈ N’, and a new rule ([a] → a) ∈ P’.
- In the rules of P, replace every terminal symbol a by its corresponding nonterminal symbol [a]. As a result, all these rules are of the form X1...Xm → Y1...Yn for nonterminals Xi, Yj and m≤n.
- Replace each rule X1...Xm → Y1...Yn with m>1 by 2m rules:
- where each Zi ∈ N’ is a new nonterminal not occurring elsewhere.
For example, the above noncontracting grammar for { anbncn | n ≥ 1 } leads to the following context-sensitive grammar (with start symbol S) for the same language:

