public static void FuncListAdd(int[] xs, int elem) { var fl = new FuncList <int>(xs); var origLength = fl.Count; fl.Add(elem); var list = new List <int>(xs ?? new int[0]) { elem }; Assert.Equal(list, fl); Assert.Equal(origLength + 1, fl.Count); }
public int ReadFuncList() { int count = 0; int fno, fdate; for (int i = 0; i < ds.Tables["Func"].Rows.Count; ++i) { DataRow r = ds.Tables["Func"].Rows[i]; if (!r.ItemArray[1].ToString().Equals("对象号")) { continue; } // 读取一个函数信息 // 第一行 对象号 1283017 版本号 6.1.4.20120625 更新日期 20120625 // 对象号 if (!int.TryParse(r.ItemArray[2].ToString(), out fno)) { fno = 0; } Func f = new Func(fno); f.StartLine = i; // 版本号 f.Version = r.ItemArray[4].ToString(); // 修改日期 if (!int.TryParse(r.ItemArray[6].ToString(), out fdate)) { fdate = 0; } f.UpdateDate = fdate; // 第二行 函数名称 FN_MONFUND_ 函数说明 函数_货币基金_撤单参数设置 功能号 1283017 // 函数说明 r = ds.Tables["Func"].Rows[++i]; f.FuncName = r.ItemArray[4].ToString(); // 功能号 f.FuncNo = r.ItemArray[6].ToString(); // 第三行 结果集返回 接口标志 所连数据库 SECUDB r = ds.Tables["Func"].Rows[++i]; f.ResultRet = r.ItemArray[2].ToString().Equals("Y") ? true : false; f.InterFlag = r.ItemArray[4].ToString(); f.ConnDB = r.ItemArray[6].ToString(); // 第四行 业务描述 r = ds.Tables["Func"].Rows[++i]; f.Description = r.ItemArray[2].ToString(); // 第五行 输入参数 字段名 字段类型 字段说明 长度 缺省值 ++i; // 第六行开始 输入参数信息 r = ds.Tables["Func"].Rows[++i]; while (!r.ItemArray[1].ToString().Equals("输出参数")) { Para p = new Para(); p.prefix = r.ItemArray[1].ToString(); p.name = r.ItemArray[2].ToString(); p.type = r.ItemArray[3].ToString(); p.desc = r.ItemArray[4].ToString(); f.InputPara.Add(p); r = ds.Tables["Func"].Rows[++i]; } // 这一行是输出参数,跳过,获取输出参数 r = ds.Tables["Func"].Rows[++i]; while (!r.ItemArray[1].ToString().Equals("变量")) { Para p = new Para(); p.prefix = r.ItemArray[1].ToString(); p.name = r.ItemArray[2].ToString(); p.type = r.ItemArray[3].ToString(); p.desc = r.ItemArray[4].ToString(); f.OutPutPara.Add(p); r = ds.Tables["Func"].Rows[++i]; } // 这一行是变量,跳过,获取变量 r = ds.Tables["Func"].Rows[++i]; while (!r.ItemArray[1].ToString().Equals("业务处理流程")) { Para p = new Para(); p.prefix = r.ItemArray[1].ToString(); p.name = r.ItemArray[2].ToString(); p.type = r.ItemArray[3].ToString(); p.desc = r.ItemArray[4].ToString(); f.VarPara.Add(p); r = ds.Tables["Func"].Rows[++i]; } // 获取业务处理流程 r = ds.Tables["Func"].Rows[++i]; while (!r.ItemArray[1].ToString().Equals("出错说明")) { string s = string.Empty; string pre = r.ItemArray[1].ToString().Trim(); if (!string.IsNullOrEmpty(pre)) { s = "<" + pre + ">"; } s += r.ItemArray[2].ToString(); f.BusinFlow.AppendLine(s); r = ds.Tables["Func"].Rows[++i]; } // 获取出错说明 r = ds.Tables["Func"].Rows[++i]; while (!r.ItemArray[1].ToString().Equals("修改记录")) { string s = r.ItemArray[2].ToString(); if (string.IsNullOrEmpty(s.Trim())) { r = ds.Tables["Func"].Rows[++i]; continue; } f.ErrorDesc.AppendLine(s); r = ds.Tables["Func"].Rows[++i]; } // 获取修改记录 while (!r.ItemArray[1].ToString().Equals("对象号")) { string s = r.ItemArray[2].ToString(); if (string.IsNullOrEmpty(s.Trim())) { break; } f.ModiRecord.AppendLine(s); ++i; if (i >= ds.Tables["Func"].Rows.Count) { break; } r = ds.Tables["Func"].Rows[i]; } //f.BusinFlow = f.BusinFlow.Replace("\r\n", "\n"); FuncList.Add(f); // 向下扫描 } return(count); }
protected override void DoAction(int action) { switch (action) { case 2: // progr -> block { root = ValueStack[ValueStack.Depth-1].blVal; } break; case 4: // func -> FUNC, ID, LB, parameters, RB, block { funcs.Add(ValueStack[ValueStack.Depth-5].sVal, new FuncDefNode(ValueStack[ValueStack.Depth-3].pVal, ValueStack[ValueStack.Depth-1].blVal)); } break; case 5: // parameters -> ID { CurrentSemanticValue.pVal = new ParametersNode(ValueStack[ValueStack.Depth-1].sVal); } break; case 6: // parameters -> parameters, COMMA, ID { CurrentSemanticValue.pVal.Add(ValueStack[ValueStack.Depth-1].sVal); } break; case 7: // fact_parameters -> expr { CurrentSemanticValue.fpVal = new FactParametersNode(ValueStack[ValueStack.Depth-1].eVal); } break; case 8: // fact_parameters -> fact_parameters, SEMICOLON, expr { CurrentSemanticValue.fpVal.Add(ValueStack[ValueStack.Depth-1].eVal); } break; case 9: // stlist -> statement { CurrentSemanticValue.blVal = new BlockNode(ValueStack[ValueStack.Depth-1].stVal); } break; case 10: // stlist -> stlist, SEMICOLON, statement { ValueStack[ValueStack.Depth-3].blVal.Add(ValueStack[ValueStack.Depth-1].stVal); CurrentSemanticValue.blVal = ValueStack[ValueStack.Depth-3].blVal; } break; case 11: // statement -> assign { CurrentSemanticValue.stVal = ValueStack[ValueStack.Depth-1].stVal; } break; case 12: // statement -> block { CurrentSemanticValue.stVal = ValueStack[ValueStack.Depth-1].blVal; } break; case 13: // statement -> cycle { CurrentSemanticValue.stVal = ValueStack[ValueStack.Depth-1].stVal; } break; case 14: // statement -> while { CurrentSemanticValue.stVal = ValueStack[ValueStack.Depth-1].stVal; } break; case 15: // statement -> repeat { CurrentSemanticValue.stVal = ValueStack[ValueStack.Depth-1].stVal; } break; case 16: // statement -> for { CurrentSemanticValue.stVal = ValueStack[ValueStack.Depth-1].stVal; } break; case 17: // statement -> write { CurrentSemanticValue.stVal = ValueStack[ValueStack.Depth-1].stVal; } break; case 18: // statement -> if { CurrentSemanticValue.stVal = ValueStack[ValueStack.Depth-1].stVal; } break; case 19: // ident -> ID { CurrentSemanticValue.eVal = new IdNode(ValueStack[ValueStack.Depth-1].sVal); } break; case 20: // assign -> ident, ASSIGN, expr { CurrentSemanticValue.stVal = new AssignNode(ValueStack[ValueStack.Depth-3].eVal as IdNode, ValueStack[ValueStack.Depth-1].eVal); } break; case 21: // assign -> ident, ASSIGN, logic_op { CurrentSemanticValue.stVal = new AssignNode(ValueStack[ValueStack.Depth-3].eVal as IdNode, ValueStack[ValueStack.Depth-1].eVal); } break; case 22: // logic_op -> BOOL { CurrentSemanticValue.eVal = new BoolValNode(ValueStack[ValueStack.Depth-1].bVal);} break; case 23: // logic_op -> expr, EQUAL, expr { CurrentSemanticValue.eVal = new LogicOpNode(ValueStack[ValueStack.Depth-3].eVal, ValueStack[ValueStack.Depth-1].eVal, "=");} break; case 24: // logic_op -> expr, MORE, expr { CurrentSemanticValue.eVal = new LogicOpNode(ValueStack[ValueStack.Depth-3].eVal, ValueStack[ValueStack.Depth-1].eVal, ">");} break; case 25: // logic_op -> expr, LESS, expr { CurrentSemanticValue.eVal = new LogicOpNode(ValueStack[ValueStack.Depth-3].eVal, ValueStack[ValueStack.Depth-1].eVal, "<");} break; case 27: // expr -> expr, ADD, T {CurrentSemanticValue.eVal = new NumOpNode(ValueStack[ValueStack.Depth-3].eVal, ValueStack[ValueStack.Depth-1].eVal, '+');} break; case 28: // expr -> expr, SUB, T {CurrentSemanticValue.eVal = new NumOpNode(ValueStack[ValueStack.Depth-3].eVal, ValueStack[ValueStack.Depth-1].eVal, '-');} break; case 30: // T -> T, MULT, F {CurrentSemanticValue.eVal = new NumOpNode(ValueStack[ValueStack.Depth-3].eVal, ValueStack[ValueStack.Depth-1].eVal, '*');} break; case 31: // T -> T, DIV, F {CurrentSemanticValue.eVal = new NumOpNode(ValueStack[ValueStack.Depth-3].eVal, ValueStack[ValueStack.Depth-1].eVal, '/');} break; case 32: // F -> ident { CurrentSemanticValue.eVal = ValueStack[ValueStack.Depth-1].eVal as IdNode; } break; case 33: // F -> INUM { CurrentSemanticValue.eVal = new IntNumNode(ValueStack[ValueStack.Depth-1].iVal); } break; case 34: // F -> RNUM { CurrentSemanticValue.eVal = new RealNumNode(ValueStack[ValueStack.Depth-1].dVal); } break; case 35: // F -> ID, LB, fact_parameters, RB { CurrentSemanticValue.eVal = new FunNode(ValueStack[ValueStack.Depth-4].sVal, funcs, ValueStack[ValueStack.Depth-2].fpVal); } break; case 36: // F -> parameters, ARROW, block { CurrentSemanticValue.eVal = new FuncDefNode(ValueStack[ValueStack.Depth-3].pVal, ValueStack[ValueStack.Depth-1].blVal); } break; case 37: // F -> LB, expr, RB { CurrentSemanticValue.eVal = new NumOpNode(ValueStack[ValueStack.Depth-2].eVal, null, '('); } break; case 38: // block -> BEGIN, stlist, END { CurrentSemanticValue.blVal = ValueStack[ValueStack.Depth-2].blVal; } break; case 39: // cycle -> CYCLE, expr, statement { CurrentSemanticValue.stVal = new CycleNode(ValueStack[ValueStack.Depth-2].eVal, ValueStack[ValueStack.Depth-1].stVal); } break; case 40: // while -> WHILE, logic_op, DO, statement { CurrentSemanticValue.stVal = new WhileNode(ValueStack[ValueStack.Depth-3].eVal as LogicOpNode, ValueStack[ValueStack.Depth-1].stVal); } break; case 41: // repeat -> REPEAT, statement, UNTIL, logic_op { CurrentSemanticValue.stVal = new RepeatNode(ValueStack[ValueStack.Depth-1].eVal as LogicOpNode, ValueStack[ValueStack.Depth-3].stVal as StatementNode); } break; case 42: // for -> FOR, assign, TO, expr, DO, statement { CurrentSemanticValue.stVal = new ForNode(ValueStack[ValueStack.Depth-5].stVal as AssignNode, ValueStack[ValueStack.Depth-3].eVal, ValueStack[ValueStack.Depth-1].stVal); } break; case 43: // write -> WRITE, LB, expr, RB { CurrentSemanticValue.stVal = new WriteNode(ValueStack[ValueStack.Depth-2].eVal); } break; case 44: // if -> IF, LB, logic_op, RB, THEN, statement { CurrentSemanticValue.stVal = new IfNode(ValueStack[ValueStack.Depth-4].eVal as LogicOpNode, ValueStack[ValueStack.Depth-1].stVal); } break; case 45: // if -> IF, LB, logic_op, RB, THEN, statement, ELSE, statement { CurrentSemanticValue.stVal = new IfNode(ValueStack[ValueStack.Depth-6].eVal as LogicOpNode, ValueStack[ValueStack.Depth-3].stVal, ValueStack[ValueStack.Depth-1].stVal); } break; } }