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); } }
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]; } }
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); } } }
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 })); } } } } }