Context-sensitive grammar

From Academic Kids

A context-sensitive grammar is a formal grammar G = (N, Σ, P, S) such that all rules in P are of the form

αAβ → αγβ

with A in N (i.e., A is single nonterminal) and α and β in (N U Σ)* (i.e., α and β strings of nonterminals and terminals) and γ in (N U Σ)+ (i.e., γ a nonempty string of nonterminals and terminals), plus that a rule of the form

S → ε

with ε the empty string, is allowed if S does not appear on the right side of any rule.

The name context-sensitive is explained by the α and β that form the context of A and determine whether A can be replaced with γ or not. This is different from a context-free grammar where the context of a nonterminal is not taken into consideration. A formal language that can be described by a context-sensitive grammar is called a context-sensitive language.

The concept of context-sensitive grammar was introduced by Noam Chomsky in the 1950s as a way to describe the syntax of natural language where it is indeed often the case that a word may or may not be appropriate in a certain place depending upon the context.


Alternative definition

Another definition of context-sensitive grammars defines them as formal grammars with the restriction that for all rules α -> β in P it holds that | α | ≤ | β | where | α | is the length of α. Such a grammar is also called a monotonic or noncontracting grammar because none of the rules decreases the size of the string that is being rewritten.

While the noncontracting grammars are different from the context-sensitive ones, the two are almost equivalent in the sense that they define the same class of languages (except that noncontracting grammars can not generate any language that contains the empty string ε). But if a formal language L can be described by a grammar of the first definition then there is a noncontracting grammar that describes L - {ε}, and vice versa.


A simple context-sensitive grammar is

S → abc | aSBc
cB → Bc
bB → bb

where | is used to separate different options for the same non-terminal. This grammar generates the language <math> \{ a^n b^n c^n : n \ge 1 \} <math>, which is not context-free. Context-sensitive grammars can match an unlimited number of symbols to their partners, unlike context-free grammars, which can only match one symbol to its partner, so there is also a context-sensitive grammar for the language <math> \{ a^n b^n c^n d^n : n \ge 1 \} <math>, but it's much more complex than the grammar above.

Normal forms

Every context-sensitive grammar which does not generate the empty string can be transformed into an equivalent one in Kuroda normal form. "Equivalent" here means that the two grammars generate the same language.

Computational properties

The decision problem that asks whether a certain string s belongs to the language of a certain context-sensitive grammar G, is PSPACE-complete. Indeed, there are even some context-sensitive grammars whose fixed grammar recognition problem is PSPACE-complete.

See also: Chomsky hierarchy

Template:Formal languages and grammars


Academic Kids Menu

  • Art and Cultures
    • Art (
    • Architecture (
    • Cultures (
    • Music (
    • Musical Instruments (
  • Biographies (
  • Clipart (
  • Geography (
    • Countries of the World (
    • Maps (
    • Flags (
    • Continents (
  • History (
    • Ancient Civilizations (
    • Industrial Revolution (
    • Middle Ages (
    • Prehistory (
    • Renaissance (
    • Timelines (
    • United States (
    • Wars (
    • World History (
  • Human Body (
  • Mathematics (
  • Reference (
  • Science (
    • Animals (
    • Aviation (
    • Dinosaurs (
    • Earth (
    • Inventions (
    • Physical Science (
    • Plants (
    • Scientists (
  • Social Studies (
    • Anthropology (
    • Economics (
    • Government (
    • Religion (
    • Holidays (
  • Space and Astronomy
    • Solar System (
    • Planets (
  • Sports (
  • Timelines (
  • Weather (
  • US States (


  • Home Page (
  • Contact Us (

  • Clip Art (
Personal tools