示例#1
0
        // Parameters //
        public static HParameterSet GetHParameter(Workspace Home, HScriptParser.Hparameter_setContext context)
        {

            // Create a set //
            HParameterSet parmset = new HParameterSet();

            // Step one: cycle through all parameters and look for any tables //
            DataSet first_data = null;
            List<HScriptParser.HparameterContext> param_context = new List<HScriptParser.HparameterContext>();
            foreach (HScriptParser.HparameterContext ctx in context.hparameter())
            {

                if (ctx.full_table_name() != null)
                {
                    DataSet d = VisitorHelper.GetData(Home, ctx.full_table_name());
                    if (first_data == null)
                        first_data = d;
                    parmset.Add(ctx.SCALAR().GetText(), d);
                }
                else
                    param_context.Add(ctx);

            }

            ExpressionVisitor exp_vis =
                first_data != null
                ? new ExpressionVisitor(null, Home, first_data.Name, first_data.Columns, new StaticRegister(null)) 
                : new ExpressionVisitor(null, Home);

            MatrixVisitor mat_vis = new MatrixVisitor(Home, null, exp_vis);

            foreach (HScriptParser.HparameterContext ctx in param_context)
            {

                string name = ctx.SCALAR().GetText();
                if (ctx.expression() != null)
                    parmset.Add(name, exp_vis.ToNode(ctx.expression()));
                else if (ctx.expression_alias_list() != null)
                    parmset.Add(name, exp_vis.ToNodes(ctx.expression_alias_list()));
                else if (ctx.lambda_unit() != null)
                    parmset.Add(name, VisitorHelper.RenderLambda(Home, ctx.lambda_unit()));
                else if (ctx.matrix_expression() != null)
                    parmset.Add(name, mat_vis.ToMatrix(ctx.matrix_expression()));
                else if (ctx.K_OUT() != null)
                    parmset.Add(name, Home.GlobalHeap.Scalars, ctx.IDENTIFIER().GetText());

            }

            return parmset;

        }