public void ProjectGrammar(int[][] traces, LAPCFGrammar grammar) { int[] trace = traces [tag]; for (int i = trace.Length - 1; i >= 0; --i) { pruned [i] = pruned [trace [i]]; } subtagCount = grammar.subTagCounts [tag]; alpha.Length = subtagCount; beta.Length = subtagCount; if (TYPE != VTYPE.TERMINAL) { for (int i = 0; i < subtagCount; ++i) { _alpha [i] = double.NegativeInfinity; } } else { for (int i = 0; i < subtagCount; ++i) { _alpha [i] = 0; } } for (int i = 0; i < beta.Length; ++i) { _beta [i] = double.NegativeInfinity; } foreach (var e in incomings) { switch (e.TYPE) { case ETYPE.BINARY: e.binaryScores = grammar.GetRuleScores (e.to.tag, e.from0.tag, e.from1.tag, true); break; case ETYPE.UNARY: e.unaryScores = grammar.GetRuleScores (e.to.tag, e.from0.tag, true); break; case ETYPE.TERMINAL: e.terminalScores = grammar.GetTerminalRuleScores (e.to.tag, e.from0.tag, true); break; case ETYPE.DUMMY: break; default: throw new Exception ("unrecognized edge type!"); } } posteriorScore = double.NegativeInfinity; }