/// <summary> /// 取得节点的处理函数 /// </summary> /// <param name="left">语法类型</param> /// <param name="leave">Token类型</param> /// <param name="nilserver">空节点展开式处理函数</param> /// <returns>候选式实例</returns> public CandidateFunction GetCFunction(SyntaxType left, TokenType leave, iHandle nilserver) { try { if (left == SyntaxType.epsilonLeave) { return(new CandidateFunction(nilserver, CFunctionType.umi_epsilon)); } CandidateFunction candidator = this.GetCFunction(this.leftNodesDict[left], this.nextLeavesDict[leave]); return(candidator ?? new CandidateFunction(null, CFunctionType.umi_errorEnd)); } catch (Exception ex) { Console.WriteLine(ex.ToString()); Console.WriteLine(String.Format("{0} --> {1}", left.ToString(), leave.ToString())); throw; } }
/// <summary> /// 设置候选式处理器 /// </summary> /// <param name="proc">处理函数委托</param> /// <param name="type">候选式类型</param> public void SetProc(iHandle proc, CFunctionType type) { this.candidateProcessor = proc; this.candidateType = type; }
/// <summary> /// 构造函数 /// </summary> /// <param name="proc">处理函数委托</param> /// <param name="type">候选式类型</param> public CandidateFunction(iHandle proc, CFunctionType type) { this.SetProc(proc, type); }