CYK Algorithm for Context Free Grammar

Prerequisite – Converting Context Free Grammar to Chomsky Normal Form**CYK algorithm** is a parsing algorithm for context free grammar.

In order to apply CYK algorithm to a grammar, it must be in Chomsky Normal Form. It uses a dynamic programming algorithm to tell whether a string is in the language of a grammar.

**Algorithm :**

Let w be the n length string to be parsed. And G represent the set of rules in our grammar with start state S.

- Construct a table DP for size n × n.
- If w = e (empty string) and S -> e is a rule in G then we accept the string else we reject.
For i = 1 to n: For each variable A: We check if A -> b is a rule and b = w

_{i }for some i: If so, we place A in cell (i, i) of our table.For l = 2 to n: For i = 1 to n-l+1: j = i+l-1 For k = i to j-1: For each rule A -> BC: We check if (i, k) cell contains B and (k + 1, j) cell contains C: If so, we put A in cell (i, j) of our table.

We check if S is in (1, n): If so, we accept the string Else, we reject.

**Example –**

Let our grammar G be:

S -> AB | BC A -> BA | a B -> CC | b C -> AB | a

We check if **baaba** is in L(G):

- We first insert single length rules into our table.
- We then fill the remaining cells of our table.
- We observe that S is in the cell (1, 5), Hence, the string
**baaba belongs to L(G).**

**Time and Space Complexity :**

**Time Complexity –**O(n

^{3}.|G|)Where |G| is the number of rules in the given grammar.

**Space Complexity –**O(n

^{2})