**C**ontext **F**ree **G**rammars (CFG) can be classified on the basis of following two properties:

1) Based on number of strings it generates.

- If CFG is generating finite number of strings, then CFG is
**Non-Recursive**(or the grammar is said to be Non-recursive grammar) - If CFG can generate infinite number of strings then the grammar is said to be
**Recursive**grammar

During Compilation, the parser uses the grammar of the language to make a parse tree(or derivation tree) out of the source code. The grammar used must be unambiguous. An ambiguous grammar must not be used for parsing.

2) Based on number of derivation trees.

- If there is only 1 derivation tree then the CFG is unambiguous.
- If there are more than 1 derivation tree, then the CFG is ambiguous.

**Examples of Recursive and Non-Recursive Grammars**

**Recursive Grammars**

1) S->SaS S->b

The language(set of strings) generated by the above grammar is :{b, bab, babab,…}, which is infinite.

2) S-> Aa A->Ab|c

The language generated by the above grammar is :{ca, cba, cbba …}, which is infinite.

**Note:** A recursive context-free grammar that contains no useless rules necessarily produces an infinite language.

**Non-Recursive Grammars**

S->Aa A->b|c

The language generated by the above grammar is :{ba, ca}, which is finite.

**Types of Recursive Grammars**

Based on the nature of the recursion in a recursive grammar, a recursive CFG can be again divided into the following:

- Left Recursive Grammar (having left Recursion)
- Right Recursive Grammar (having right Recursion)
- General Recursive Grammar(having general Recursion)

** Note:**A linear grammar is a context-free grammar that has at most one non-terminal in the right hand side of each of its productions.

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above

Attention reader! Don’t stop learning now. Get hold of all the important CS Theory concepts for SDE interviews with the CS Theory Course at a student-friendly price and become industry ready.

## Recommended Posts:

- Difference between Thread Context Switch and Process Context Switch
- Parsing ambiguos grammars using LR parser
- Converting Context Free Grammar to Chomsky Normal Form
- Converting Context Free Grammar to Greibach Normal Form
- Check if the language is Context Free or Not
- Regular Expression Vs Context Free Grammar
- Various Properties of context free languages (CFL)
- Context-sensitive Grammar (CSG) and Language (CSL)
- Measure the time spent in context switch?
- Classification and Programming of Read-Only Memory (ROM)
- Classification of Top Down Parsers
- Classification of Number System
- Classification of Routing Algorithms
- Collision-Free Protocols in Computer Network