先决条件–将上下文无关语法转换为Chomsky范式
CYK算法是一种上下文无关文法的解析算法。
为了将CYK算法应用于语法,它必须采用Chomsky Normal Form。它使用动态编程算法来判断字符串是否为语法语言。
算法 :
令w为要解析的长度为n的字符串。 G表示我们语法中具有起始状态S的规则集。
- 构造大小为n×n的表DP。
- 如果w = e(空字符串)并且S-> e是G中的规则,则我们接受字符串,否则我们拒绝。
-
For i = 1 to n: For each variable A: We check if A -> b is a rule and b = wi 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.
例子 –
让我们的语法G为:
S -> AB | BC
A -> BA | a
B -> CC | b
C -> AB | a
我们检查baaba是否在L(G)中:
- 我们首先将单长规则插入到表中。
- 然后,我们填充表格的其余单元格。
- 我们观察到S在单元格(1、5)中,因此字符串baaba属于L(G)。
时空复杂性:
- 时间复杂度–
O(n3.|G|)
| G |是给定语法中规则的数量。
- 空间复杂性–
O(n2)