Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
  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;
    }
  }