.. _CYKParsing: .. raw:: html .. |--| unicode:: U+2013 .. en dash .. |---| unicode:: U+2014 .. em dash, trimming surrounding whitespace :trim: .. This file is part of the OpenDSA eTextbook project. See .. http://algoviz.org/OpenDSA for more details. .. Copyright (c) 2012-2016 by the OpenDSA Project Contributors, and .. distributed under an MIT open source license. .. avmetadata:: :author: Susan Rodger and Cliff Shaffer :requires: Parsing Introduction :satisfies: CYK Parsing :topic: Parsing CYK Parsing =========== CYK Parsing ----------- Invented by J. Cocke, D.H. Younger, and T. Kasami Requires :math:`|w|^3` steps to parse string :math:`w`. :term:`Dynamic Programming` remembers the answer to small subproblems so that it won't have to solve them again. For CYK Parsing, the grammar must be in Chomsky Normal Form (CNF) first. | **Definition:** A CFG is in Chomsky Normal Form (CNF) if all productions are of the form | :math:`A \rightarrow BC` or :math:`A \rightarrow a` | where :math:`A, B, C \in V` and :math:`a \in T`. CYK Parsing Algorithm ~~~~~~~~~~~~~~~~~~~~~ | Assume :math:`G = (V, T, S, P)` is in CNF, and :math:`w = a_1a_2...a_n`. | Define substrings :math:`w_{ij} = a_i...a_j`. | Define subsets of :math:`V, V_{ij} = \{A \in V \mid A \stackrel{*}{\Rightarrow} w_{ij} \}` | Then :math:`w \in L(G)` if and only if :math:`S \in V_{1n}`. .. note:: :math:`A \in V_{ii}` if and only if there is what kind of production? Answer: :math:`A \rightarrow a_i` | All :math:`V_{ii}` are easy, just based on if there is a production. | Note: Compute :math:`V_{ij}`. For :math:`j >i`, :math:`A` derives :math:`w_{ij}` if and only if there is a production :math:`A \rightarrow BC` with :math:`B \stackrel{*}{\Rightarrow} w_{ik}` and :math:`C \stackrel{*}{\Rightarrow} w_{{k+1}j}` for some :math:`k` with :math:`i \le k, k < j`. Algorithm ~~~~~~~~~ 1. Compute :math:`V_{11}, V_{22}, V_{33}, \ldots, V_{nn}` 2. Compute :math:`V_{12}, V_{23}, V_{34}, \ldots, V_{{n-1}n}` 3. Compute :math:`V_{13}, V_{24}, V_{35}, \ldots, V_{{n-2}n}` 4. :math:`\ldots` 5. Last step is? Compute :math:`V_{1n}` How do we know if it worked? If the last step is :math:`S` .. topic:: Example | :math:`S \rightarrow CD \mid CF` | :math:`B \rightarrow HB \mid c` | :math:`C \rightarrow a` | :math:`D \rightarrow SE` | :math:`E \rightarrow GG` | :math:`F \rightarrow BE` | :math:`G \rightarrow b` | :math:`H \rightarrow c` Build the CYK Parse table: .. math:: \begin{array}{|l|l|l|l|l|l|l|} \ a& \ a & \ c &\ b & \ b & \ b& \ b \\ \hline \ \ \ & \ \ \ & \ \ \ & \ \ \ & \ \ \ & \ \ \ & \ \ \ \\ \hline \ \ \ & \ \ \ & \ \ \ & \ \ \ & \ \ \ & \ \ \ \\ \cline{1-6} \ \ \ & \ \ \ & \ \ \ & \ \ \ & \ \ \ \\ \cline{1-5} \ \ \ & \ \ \ & \ \ \ & \ \ \ \\ \cline{1-4} \ \ \ & \ \ \ & \ \ \ \\ \cline{1-3} \ \ \ & \ \ \ \\ \cline{1-2} \ \ \ \\ \cline{1-1} \end{array}