Misplaced Pages

Production (computer science)

Article snapshot taken from Wikipedia with creative commons attribution-sharealike license. Give it a read and then ask your questions in the chat. We can research this topic together.
(Redirected from Production rule (formal languages)) Method of symbol substitution Not to be confused with Deployment environment § Production.For other uses, see Production.
This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.
Find sources: "Production" computer science – news · newspapers · books · scholar · JSTOR (November 2012) (Learn how and when to remove this message)
Part of a series on
Formal languages
Key concepts
Applications

A production or production rule in computer science is a rewrite rule specifying a symbol substitution that can be recursively performed to generate new symbol sequences. A finite set of productions P {\displaystyle P} is the main component in the specification of a formal grammar (specifically a generative grammar). The other components are a finite set N {\displaystyle N} of nonterminal symbols, a finite set (known as an alphabet) Σ {\displaystyle \Sigma } of terminal symbols that is disjoint from N {\displaystyle N} and a distinguished symbol S N {\displaystyle S\in N} that is the start symbol.

In an unrestricted grammar, a production is of the form u v {\displaystyle u\to v} , where u {\displaystyle u} and v {\displaystyle v} are arbitrary strings of terminals and nonterminals, and u {\displaystyle u} may not be the empty string. If v {\displaystyle v} is the empty string, this is denoted by the symbol ϵ {\displaystyle \epsilon } , or λ {\displaystyle \lambda } (rather than leaving the right-hand side blank). So productions are members of the cartesian product

V N V × V = ( V Σ ) × V {\displaystyle V^{*}NV^{*}\times V^{*}=(V^{*}\setminus \Sigma ^{*})\times V^{*}} ,

where V := N Σ {\displaystyle V:=N\cup \Sigma } is the vocabulary, {\displaystyle {}^{*}} is the Kleene star operator, V N V {\displaystyle V^{*}NV^{*}} indicates concatenation, {\displaystyle \cup } denotes set union, and {\displaystyle \setminus } denotes set minus or set difference. If we do not allow the start symbol to occur in v {\displaystyle v} (the word on the right side), we have to replace V {\displaystyle V^{*}} by ( V { S } ) {\displaystyle (V\setminus \{S\})^{*}} on the right side of the cartesian product symbol.

The other types of formal grammar in the Chomsky hierarchy impose additional restrictions on what constitutes a production. Notably in a context-free grammar, the left-hand side of a production must be a single nonterminal symbol. So productions are of the form:

N ( N Σ ) {\displaystyle N\to (N\cup \Sigma )^{*}}

Grammar generation

To generate a string in the language, one begins with a string consisting of only a single start symbol, and then successively applies the rules (any number of times, in any order) to rewrite this string. This stops when a string containing only terminals is obtained. The language consists of all the strings that can be generated in this manner. Any particular sequence of legal choices taken during this rewriting process yields one particular string in the language. If there are multiple different ways of generating this single string, then the grammar is said to be ambiguous.

For example, assume the alphabet consists of a {\displaystyle a} and b {\displaystyle b} , with the start symbol S {\displaystyle S} , and we have the following rules:

1. S a S b {\displaystyle S\rightarrow aSb}
2. S b a {\displaystyle S\rightarrow ba}

then we start with S {\displaystyle S} , and can choose a rule to apply to it. If we choose rule 1, we replace S {\displaystyle S} with a S b {\displaystyle aSb} and obtain the string a S b {\displaystyle aSb} . If we choose rule 1 again, we replace S {\displaystyle S} with a S b {\displaystyle aSb} and obtain the string a a S b b {\displaystyle aaSbb} . This process is repeated until we only have symbols from the alphabet (i.e., a {\displaystyle a} and b {\displaystyle b} ). If we now choose rule 2, we replace S {\displaystyle S} with b a {\displaystyle ba} and obtain the string a a b a b b {\displaystyle aababb} , and are done. We can write this series of choices more briefly, using symbols: S a S b a a S b b a a b a b b {\displaystyle S\Rightarrow aSb\Rightarrow aaSbb\Rightarrow aababb} . The language of the grammar is the set of all the strings that can be generated using this process: { b a , a b a b , a a b a b b , a a a b a b b b , } {\displaystyle \{ba,abab,aababb,aaababbb,\dotsc \}} .

See also

References

  1. See Klaus Reinhardt: Prioritatszahlerautomaten und die Synchronisation von Halbspursprachen Archived 2018-01-17 at the Wayback Machine; Fakultät Informatik der Universität Stuttgart; 1994 (German)
Categories: