title: Cannot understand CYK Algorithm pseudo-code
body: <p>I was reading about the <a href="https://en.wikipedia.org/wiki/CYK_algorithm" rel="nofollow">CYK algorithm</a>, and there is one part of pseudo-code I cannot understand. The whole pseudo-code is:</p>
  
  <pre><code>let the input be a string S consisting of n characters: a1 ... an.
  let the grammar contain r nonterminal symbols R1 ... Rr.
  This grammar contains the subset Rs which is the set of start symbols.
  let P[n,n,r] be an array of booleans. Initialize all elements of P to false.
  for each i = 1 to n
    for each unit production Rj -&gt; ai
      set P[i,1,j] = true
  for each i = 2 to n -- Length of span
    for each j = 1 to n-i+1 -- Start of span
      for each k = 1 to i-1 -- Partition of span
        for each production RA -&gt; RB RC
          if P[j,k,B] and P[j+k,i-k,C] then set P[j,i,A] = true
  if any of P[1,n,x] is true (x is iterated over the set s, where s are all the indices for Rs) then
    S is member of language
  else
    S is not member of language
  </code></pre>
  
  <p>These parts are which I am confused:</p>
  
  <pre><code>    for each production RA -&gt; RB RC
        if P[j,k,B] and P[j+k,i-k,C] then set P[j,i,A] = true
  </code></pre>
  
  <p>Would someone give some hints about these pseudocode?</p>