anchor.diff:           |ToLeaf(a,b) -> if(b = s.[k])then
                               let nonTerminals,_,_,rules = recTable.[k,0]
                               recTable.[k,0] <- ((a::nonTerminals),(-1,-1),(-1,-1),(rule::rules))
  -         |_           -> ()                                            
  +         |_           -> ()
      //последующие столбцы
      fillTable 0 1
  -   recTable                                           
  +   recTable                             
   
   //вывод строки s в грамматике g
   let recognize ((rules, start)as g) s =
  
positive.code:            
     let recTable = Microsoft.FSharp.Collections.Array2D.create s.Length s.Length ([],(0,0),(0,0),[]) 
     //recTable(i,l), для l > 0
     let elem i l = for rule in rules do
                       for k in 0..(l-1) do
                          match rule with
                          |ToBranch(a,b,c) -> let nonTerminals1,_,_,_ = recTable.[i,k]
                                              let nonTerminals2,_,_,_ = recTable.[k+i+1,l-k-1]
                                              let nonTerminals,_,_,rules = recTable.[i,l]
                                              if(List.exists ((=)b) nonTerminals1) && (List.exists ((=)c) nonTerminals2)then
                                                 recTable.[i,l] <- ((a::nonTerminals),(i,k),(k+i+1,l-k-1),(rule::rules))
                          |_               -> ()                  
     //Заполнение RecognitionTable                                            
     let rec fillTable i l = if l = s.Length-1 then
                                elem i l//последний элемент таблицы
                             else if(i+l) <= (s.Length-1)then
                                     elem i l
                                     fillTable (i+1) l//продолжаем заполнять столбец
                                  else
                                     fillTable 0 (l+1)//переход на новый столбец
     //первый столбец таблицы для правил, выводящих терминал
     for rule in rules do
        for k in 0..(s.Length-1) do
  
negative.code: ﻿(*
  Курсовая работа Лебедковой Татьяны, 361гр
  на тему "Реализация алгоритма CYK для разбора языков, порожденных
  контекстно-свободными грамматиками в нормальной форме Хомского"
  