Exemple #1
0
        public override SequenceFilterCallBase CreateSequenceMatchClassFilterCall(String matchClassName, String matchClassPackage,
                                                                                  String packagePrefix, String filterBase, List <String> entities,
                                                                                  SequenceVariable initArrayAccess, SequenceExpression initExpr,
                                                                                  SequenceVariable arrayAccess, SequenceVariable previousAccumulationAccess,
                                                                                  SequenceVariable index, SequenceVariable element, SequenceExpression lambdaExpr)
        {
            String             packagePrefixedMatchClassName = matchClassPackage != null ? matchClassPackage + "::" + matchClassName : matchClassName; // no (further) resolving of match classes in interpreted sequences cause there is no package context existing
            MatchClassFilterer matchClass = actions.GetMatchClass(packagePrefixedMatchClassName);                                                      // may be null, match class is part of filter call, was not checked before

            if (matchClass == null)
            {
                throw new SequenceParserException(packagePrefixedMatchClassName, packagePrefixedMatchClassName + "." + filterBase, SequenceParserError.MatchClassError);
            }

            String filterName          = GetFilterName(filterBase, entities);
            String packagePrefixedName = filterName;

            if (entities.Count == 1 && filterBase == "assignStartWithAccumulateBy")
            {
                return(new SequenceFilterCallLambdaExpressionInterpreted(matchClass, filterBase, entities[0],
                                                                         initArrayAccess, initExpr,
                                                                         arrayAccess, previousAccumulationAccess, index, element, lambdaExpr));
            }
            else
            {
                throw new SequenceParserException(packagePrefixedMatchClassName, packagePrefixedName, SequenceParserError.FilterError);
            }
        }
Exemple #2
0
        public override SequenceFilterCallBase CreateSequenceMatchClassFilterCall(String matchClassName, String matchClassPackage,
                                                                                  String packagePrefix, String filterBase, List <String> entities,
                                                                                  SequenceVariable initArrayAccess, SequenceExpression initExpr,
                                                                                  SequenceVariable arrayAccess, SequenceVariable previousAccumulationAccess,
                                                                                  SequenceVariable index, SequenceVariable element, SequenceExpression lambdaExpr)
        {
            String resolvedMatchClassPackage; // match class not yet resolved (impossible before as only part of filter call), resolve it here
            String packagePrefixedMatchClassName;
            bool   contextMatchClassNameExists = actionNames.matchClassesToFilters.ContainsKey(PackagePrefixedName(matchClassName, packageContext));

            ResolvePackage(matchClassName, matchClassPackage, packageContext, contextMatchClassNameExists,
                           out resolvedMatchClassPackage, out packagePrefixedMatchClassName);
            if (!actionNames.ContainsMatchClass(packagePrefixedMatchClassName))
            {
                throw new SequenceParserException(packagePrefixedMatchClassName, packagePrefixedMatchClassName + "." + filterBase, SequenceParserError.MatchClassError);
            }

            String filterName = GetFilterName(filterBase, entities);

            String packagePrefixedName = filterName;

            if (entities.Count == 1 && filterBase == "assignStartWithAccumulateBy")
            {
                return(new SequenceFilterCallLambdaExpressionCompiled(matchClassName, resolvedMatchClassPackage, packagePrefixedMatchClassName,
                                                                      filterBase, entities[0],
                                                                      initArrayAccess, initExpr,
                                                                      arrayAccess, previousAccumulationAccess, index, element, lambdaExpr));
            }
            else
            {
                throw new SequenceParserException(packagePrefixedMatchClassName, packagePrefixedName, SequenceParserError.FilterError);
            }
        }
Exemple #3
0
        public SH_ObjectSequence(IStream element, int index, eTypeObjectCollection typeCollection, string text)
            : base(element, index, typeCollection)
        {
            string @string = text.Trim();

            if (@string.StartsWith("="))
            {
                @string = @string.Substring(1).Trim();
                if (DoubleValue.IsCheck(@string))
                {
                    Value = new DoubleValue(@string);
                }
                else if (CheckedVariableName(ref @string))
                {
                    Variable = new SequenceVariable(@string, new DoubleValue(0), new DoubleValue(-100), new DoubleValue(100), null);
                }
                else
                {
                    Type = eTypeObjectStream.Default;
                }
            }
            else if (DoubleValue.IsCheck(@string))
            {
                Value = new DoubleValue(@string);
            }
            else if (CheckedTableName(ref @string))
            {
                Table = new GradientWaveformTableSequence(this, @string);
            }
            else
            {
                Type = eTypeObjectStream.Default;
            }
        }
Exemple #4
0
 /// <summary>
 /// Emit variable declarations needed (only once for every variable)
 /// </summary>
 private void EmitVarIfNew(SequenceVariable var, SourceBuilder source)
 {
     if (!var.Visited)
     {
         var.Visited = true;
         source.AppendFront(seqHelper.DeclareVar(var));
     }
 }
Exemple #5
0
 /// <summary>
 /// Returns string containing a C# expression to get the value of the sequence-local variable / graph-global variable given
 /// </summary>
 public string GetVar(SequenceVariable seqVar)
 {
     if (seqVar.Type == "")
     {
         return("procEnv.GetVariableValue(\"" + seqVar.PureName + "\")");
     }
     else
     {
         return("var_" + seqVar.Prefix + seqVar.PureName);
     }
 }
Exemple #6
0
 /// <summary>
 /// Returns string containing a C# assignment to set the sequence-local variable / graph-global variable given
 /// to the value as computed by the C# expression in the string given
 /// </summary>
 public string SetVar(SequenceVariable seqVar, String valueToWrite)
 {
     if (seqVar.Type == "")
     {
         return("procEnv.SetVariableValue(\"" + seqVar.PureName + "\", " + valueToWrite + ");\n");
     }
     else
     {
         String cast = "(" + TypesHelper.XgrsTypeToCSharpType(seqVar.Type, model) + ")";
         return("var_" + seqVar.Prefix + seqVar.PureName + " = " + cast + "(" + valueToWrite + ");\n");
     }
 }
Exemple #7
0
        public O1_ObjectSequence(IStream element, int index, eTypeObjectCollection typeCollection, string text)
            : base(element, index, typeCollection)
        {
            string @string = text.Trim();

            if (typeCollection == eTypeObjectCollection._1D)
            {
                if (@string.StartsWith("="))
                {
                    @string = @string.Substring(1).Trim();
                    if (FrequencyValue.IsCheck(@string))
                    {
                        Value = new FrequencyValue(@string);
                    }
                    else if (CheckedVariableName(ref @string))
                    {
                        Variable = new SequenceVariable(@string, new FrequencyValue(0));
                    }
                    else
                    {
                        Type = eTypeObjectStream.Default;
                    }
                }
                else if (FrequencyValue.IsCheck(@string))
                {
                    Value = new FrequencyValue(@string);
                }
                else if (CheckedTableName(ref @string))
                {
                    Table = new FrequencyTableSequence(this, @string);
                }
                else
                {
                    Type = eTypeObjectStream.Default;
                }
            }
            else
            {
                if (CheckedTableName(ref @string))
                {
                    Table = new FrequencyTableSequence(this, @string);
                }
                else
                {
                    Type = eTypeObjectStream.Default;
                }
            }
        }
Exemple #8
0
 /// <summary>
 /// Returns string containing a C# declaration of the variable given
 /// </summary>
 public string DeclareVar(SequenceVariable seqVar)
 {
     if (seqVar.Type != "")
     {
         StringBuilder sb = new StringBuilder();
         sb.Append(TypesHelper.XgrsTypeToCSharpType(seqVar.Type, model));
         sb.Append(" ");
         sb.Append("var_" + seqVar.Prefix + seqVar.PureName);
         sb.Append(" = ");
         sb.Append(TypesHelper.DefaultValueString(seqVar.Type, model));
         sb.Append(";\n");
         return(sb.ToString());
     }
     else
     {
         return("");
     }
 }
Exemple #9
0
        public override SequenceFilterCallBase CreateSequenceFilterCall(String ruleName, String rulePackage,
                                                                        String packagePrefix, String filterBase, List <String> entities,
                                                                        SequenceVariable initArrayAccess, SequenceExpression initExpr,
                                                                        SequenceVariable arrayAccess, SequenceVariable previousAccumulationAccess,
                                                                        SequenceVariable index, SequenceVariable element, SequenceExpression lambdaExpr)
        {
            String packagePrefixedRuleName = rulePackage != null ? rulePackage + "::" + ruleName : ruleName; // rulePackage already resolved, concatenation sufficient

            String filterName          = GetFilterName(filterBase, entities);
            String packagePrefixedName = filterName;

            if (entities.Count == 1 && filterBase == "assignStartWithAccumulateBy")
            {
                return(new SequenceFilterCallLambdaExpressionCompiled(filterBase, entities[0],
                                                                      initArrayAccess, initExpr,
                                                                      arrayAccess, previousAccumulationAccess, index, element, lambdaExpr));
            }
            else
            {
                throw new SequenceParserException(packagePrefixedRuleName, filterName, SequenceParserError.FilterError);
            }
        }
Exemple #10
0
        public override SequenceFilterCallBase CreateSequenceFilterCall(String ruleName, String rulePackage,
                                                                        String packagePrefix, String filterBase, List <String> entities,
                                                                        SequenceVariable initArrayAccess, SequenceExpression initExpr,
                                                                        SequenceVariable arrayAccess, SequenceVariable previousAccumulationAccess,
                                                                        SequenceVariable index, SequenceVariable element, SequenceExpression lambdaExpr)
        {
            String  packagePrefixedRuleName = !PackageIsNullOrGlobal(rulePackage) ? rulePackage + "::" + ruleName : ruleName; // no (further) resolving of rules in interpreted sequences cause there is no package context existing
            IAction action = actions.GetAction(packagePrefixedRuleName);                                                      // must be not null due to preceeding checks of rule call resolving result

            String filterName          = GetFilterName(filterBase, entities);
            String packagePrefixedName = filterName;

            if (entities.Count == 1 && filterBase == "assignStartWithAccumulateBy")
            {
                return(new SequenceFilterCallLambdaExpressionInterpreted(/*action, */ filterBase, entities[0],
                                                                         initArrayAccess, initExpr,
                                                                         arrayAccess, previousAccumulationAccess, index, element, lambdaExpr));
            }
            else
            {
                throw new SequenceParserException(action.PackagePrefixedName, packagePrefixedName, SequenceParserError.FilterError);
            }
        }
Exemple #11
0
        public override SequenceRuleCountAllCall CreateSequenceRuleCountAllCall(String ruleName, String packagePrefix,
                                                                                List <SequenceExpression> argExprs, List <SequenceVariable> returnVars, SequenceVariable subgraph,
                                                                                bool special, bool test)
        {
            String package;
            String packagePrefixedName;

            ResolvePackage(ruleName, packagePrefix, packageContext, actionNames.ContainsRule(PackagePrefixedName(ruleName, packageContext)),
                           out package, out packagePrefixedName);
            if (!actionNames.ContainsRule(packagePrefixedName))
            {
                throw new SequenceParserException(packagePrefixedName, DefinitionType.Action, SequenceParserError.UnknownRuleOrSequence);
            }

            SequenceRuleCountAllCall seqRuleCountAllCall = new SequenceRuleCountAllCallCompiled(ruleName, package, packagePrefixedName,
                                                                                                argExprs, returnVars, subgraph,
                                                                                                special, test);

            return(seqRuleCountAllCall);
        }
Exemple #12
0
        public override SequenceRuleAllCall CreateSequenceRuleAllCall(String ruleName, String packagePrefix,
                                                                      List <SequenceExpression> argExprs, List <SequenceVariable> returnVars, SequenceVariable subgraph,
                                                                      bool special, bool test,
                                                                      bool chooseRandom, SequenceVariable varChooseRandom,
                                                                      bool chooseRandom2, SequenceVariable varChooseRandom2, bool choice)
        {
            String  packagePrefixedName = !PackageIsNullOrGlobal(packagePrefix) ? packagePrefix + "::" + ruleName : ruleName;
            IAction action = actions.GetAction(packagePrefixedName);

            if (action == null)
            {
                throw new SequenceParserException(packagePrefixedName, DefinitionType.Action, SequenceParserError.UnknownRuleOrSequence);
            }

            return(new SequenceRuleAllCallInterpreted(action,
                                                      argExprs, returnVars, subgraph,
                                                      special, test,
                                                      chooseRandom, varChooseRandom,
                                                      chooseRandom2, varChooseRandom2, choice));
        }
Exemple #13
0
        public override SequenceSequenceCall CreateSequenceSequenceCall(String sequenceName, String packagePrefix,
                                                                        List <SequenceExpression> argExprs, List <SequenceVariable> returnVars, SequenceVariable subgraph,
                                                                        bool special)
        {
            String packagePrefixedName      = !PackageIsNullOrGlobal(packagePrefix) ? packagePrefix + "::" + sequenceName : sequenceName;
            ISequenceDefinition sequenceDef = actions.GetSequenceDefinition(packagePrefixedName);

            if (sequenceDef == null)
            {
                throw new SequenceParserException(packagePrefixedName, DefinitionType.Sequence, SequenceParserError.UnknownRuleOrSequence);
            }

            return(new SequenceSequenceCallInterpreted(sequenceDef,
                                                       argExprs, returnVars, subgraph,
                                                       special));
        }
Exemple #14
0
        /// <summary>
        /// Устанавливаем данные импорта
        /// </summary>
        public void SetDataImport(PulseSequence pulseSequence)
        {
            List <Variable>       variablelist = new List <Variable>();
            List <TableSequence>  tableList    = new List <TableSequence>( );
            List <StreamSequence> streamList   = new List <StreamSequence>( );

            if (pulseSequence.sequenceParameters.variableSequence != null)
            {
                foreach (SequenceParameters.Parameter parametr in pulseSequence.sequenceParameters.variableSequence)
                {
                    SequenceVariable variable  = new SequenceVariable( );
                    Type             typeValue = Value.GetAutoType(parametr.value, parametr.minimum, parametr.maximum);
                    variable.Name       = parametr.name;
                    variable.IsReadOnly = parametr.isReadOnly;

                    if (!string.IsNullOrWhiteSpace(parametr.minimum))
                    {
                        variable.Min = (Value)Activator.CreateInstance(typeValue, new object[] { parametr.minimum, null });
                    }
                    if (!string.IsNullOrWhiteSpace(parametr.maximum))
                    {
                        variable.Max = (Value)Activator.CreateInstance(typeValue, new object[] { parametr.maximum, null });
                    }
                    variable.Value = (Value)Activator.CreateInstance(typeValue, new object[] { parametr.value, null });

                    variablelist.Add(variable);
                }
            }
            SequenceVariables = variablelist.ToArray( );

            variablelist.Clear( );
            if (pulseSequence.sequenceParameters.variableTable != null)
            {
                foreach (SequenceParameters.Parameter parametr in pulseSequence.sequenceParameters.variableTable)
                {
                    TableVariable variable = new TableVariable( );
                    variable.Name       = parametr.name;
                    variable.IsReadOnly = parametr.isReadOnly;
                    if (!string.IsNullOrWhiteSpace(parametr.minimum))
                    {
                        variable.Min = Value.CreateInstance(parametr.minimum);
                    }
                    if (!string.IsNullOrWhiteSpace(parametr.maximum))
                    {
                        if (variable.Min != null)
                        {
                            variable.Max = (Value)Activator.CreateInstance(variable.Min.GetType( ), new object[] { parametr.maximum, null });
                        }
                        else
                        {
                            variable.Max = Value.CreateInstance(parametr.maximum);
                        }
                    }
                    if (variable.Min != null)
                    {
                        variable.Value = (Value)Activator.CreateInstance(variable.Min.GetType( ), new object[] { parametr.value, null });
                    }
                    else if (variable.Max != null)
                    {
                        variable.Value = (Value)Activator.CreateInstance(variable.Max.GetType( ), new object[] { parametr.value, null });
                    }
                    else
                    {
                        variable.Value = Value.CreateInstance(parametr.value);
                    }

                    variablelist.Add(variable);
                }
            }
            TableVariables = variablelist.ToArray( );

            foreach (SequenceTable table in pulseSequence.sequenceTables)
            {
                tableList.Add(TableSequence.CreateInstance(table));
            }
            Tables = tableList.ToArray( );

            foreach (SequenceRow row in pulseSequence.sequenceRows)
            {
                streamList.Add(new StreamSequence(row));
            }
            Streams = streamList.ToArray( );
        }