/// <summary> /// 设置节点分析函数 /// </summary> /// <param name="row">行号</param> /// <param name="col">列号</param> /// <param name="proc">产生式</param> public void SetCellular(int row, int col, CandidateFunction proc) { if (0 <= row && row < this.rowCount && 0 <= col && col < this.colCount) { this.parserMap[row, col] = proc; } }
/// <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="left">语法类型</param> /// <param name="leave">Token类型</param> /// <param name="proc">产生式</param> public void SetCellular(SyntaxType left, TokenType leave, CandidateFunction proc) { this.SetCellular(this.leftNodesDict[left], this.nextLeavesDict[leave], proc); }