예제 #1
0
 private void FillBasicRow()
 {
     for (int i = 0; i < word.Length; i++)
     {
         CykTable[0][i] = TableField <A> .WithTerminal((Exprinal <A>) cfg.Cfg.GetNonVariableSymbols().First(a => a.Name.Equals(word[i].ToString())), epsilonSymbols, cfg);
     }
 }
예제 #2
0
        private void InitializeCykTable()
        {
            CykTable = new TableField <A> [word.Length][];

            for (int i = 0; i < word.Length; i++)
            {
                CykTable[i] = new TableField <A> [word.Length - i];
            }
        }
예제 #3
0
 private void FillOtherRows()
 {
     for (int row = 1; row < word.Length; row++)
     {
         for (int column = 0; column < word.Length - row; column++)
         {
             CykTable[row][column] = TableField <A> .CreateTableFieldForCYKTable(CykTable, row, column, epsilonSymbols, cfg);
         }
     }
 }
예제 #4
0
 private static void CombineTwoTableFields(Dictionary <int, DerivationNode <A> > entries, TableField <A> left, TableField <A> right, Dictionary <int, DerivationNode <A> > epsilonSymbols, PerformanceCFG cfg)
 {
     foreach (var prod in cfg.BinaryProductions)
     {
         if (left.Entries.TryGetValue(prod.Rhs[0].UnqiueId, out DerivationNode <A> leftNode))
         {
             if (right.Entries.TryGetValue(prod.Rhs[1].UnqiueId, out DerivationNode <A> rightNode))
             {
                 if (!entries.ContainsKey(prod.Lhs.UnqiueId))
                 {
                     entries.Add(prod.Lhs.UnqiueId, new DerivationNode <A>(prod, new List <DerivationNode <A> >()
                     {
                         leftNode, rightNode
                     }));
                 }
             }
         }
     }
 }