Ejemplo n.º 1
0
        private bool CheckPrePost(ILSpecification ilSpecification, ParBase parPrefix, ParBase parPostfix, bool checkContent = true)
        {
            ilSpecification.prefix  = parPrefix?.xmlValue ?? string.Empty;
            ilSpecification.postfix = parPostfix?.xmlValue ?? string.Empty;
            if (string.IsNullOrEmpty(ilSpecification.prefix) && string.IsNullOrEmpty(ilSpecification.postfix))
            {
                return(true);    // if no prefix or postfix is defined, then all vars match naming by definition.
            }
            if (!checkContent)
            {
                return(true);
            }

            foreach (string v in ParIL.GetILComponents(ilSpecification.ilName, infoStore.operandAdmin))
            {
                if (v.StartsWith(ilSpecification.prefix, StringComparison.OrdinalIgnoreCase) &&
                    v.EndsWith(ilSpecification.postfix, StringComparison.OrdinalIgnoreCase))
                {
                    continue;
                }
                infoStore.communicator.ReportError(new Communicator.ErrorInfo()
                {
                    isWarning = false,
                    message   = $"{description.Get()}: {ilSpecification.ilName}: contained variables must be named {GetFullVarName("*", ilSpecification)}; " +
                                $"variable {v} does not follow this rule"
                });
                return(false);
            }
            return(true);
        }
Ejemplo n.º 2
0
        private List <string> GetCoreVars(ILSpecification ilSpecification)
        {
            List <string> cv = new List <string>();

            foreach (string v in ParIL.GetILComponents(ilSpecification.ilName, infoStore.operandAdmin))
            {
                cv.Add(GetCoreVarName(v, ilSpecification));
            }
            return(cv);
        }
Ejemplo n.º 3
0
        private bool CheckCoreVars(ILSpecification ilSpecification)
        {
            List <string> ilCoreVars = GetCoreVars(ilSpecification);

            foreach (string cv in coreVarNames)
            {
                if (ilCoreVars.Contains(cv, true))
                {
                    continue;
                }
                infoStore.communicator.ReportError(new Communicator.ErrorInfo()
                {
                    isWarning = false,
                    message   = $"{description.Get()}: {ilSpecification.ilName} does not contain variable {GetFullVarName(cv, ilSpecification)}"
                });
                return(false);
            }
            return(true);
        }
Ejemplo n.º 4
0
        protected override void PrepareNonCommonPar()
        {
            parFormula = GetUniquePar <ParFormula>(DefPar.IlArithOp.Formula);

            baseILSpecification = new ILSpecification()
            {
                ilName = GetUniquePar <ParIL>(DefPar.IlArithOp.Base_ILName).xmlValue
            };
            if (!CheckPrePost(baseILSpecification, GetUniquePar <ParBase>(DefPar.IlArithOp.Base_Prefix),
                              GetUniquePar <ParBase>(DefPar.IlArithOp.Base_Postfix)))
            {
                return;
            }

            coreVarNames = GetCoreVars(baseILSpecification); // assess the variables which need to be present in all decomposed ILs

            ilSpecifications = new List <ILSpecification>();
            foreach (var pg in GetParGroups(DefPar.IlArithOp.ILName))
            {
                List <ParBase>  ilParList       = pg.Value;
                ILSpecification ilSpecification = new ILSpecification()
                {
                    ilName = GetUniqueGroupPar <ParIL>(DefPar.IlArithOp.ILName, ilParList).xmlValue, grpNo = pg.Key.ToString()
                };
                if (!CheckPrePost(ilSpecification, GetUniqueGroupPar <ParBase>(DefPar.IlArithOp.Prefix, ilParList),
                                  GetUniqueGroupPar <ParBase>(DefPar.IlArithOp.Postfix, ilParList)))
                {
                    return;
                }
                if (!CheckCoreVars(ilSpecification))
                {
                    return;
                }
                ilSpecifications.Add(ilSpecification);
            }

            outILSpecification = new ILSpecification()
            {
                ilName = GetUniquePar <ParBase>(DefPar.IlArithOp.Out_ILName).xmlValue
            };
            bool outVarsMustExist = parFormula.xmlValue.Contains(DefPar.IlArithOp.OUT_IL_COMPONENT.ToLower());
            bool outILExists      = infoStore.operandAdmin.Exists(outILSpecification.ilName) && infoStore.operandAdmin.GetParType(outILSpecification.ilName) == DefPar.PAR_TYPE.IL;

            if (!CheckPrePost(outILSpecification, GetUniquePar <ParBase>(DefPar.IlArithOp.Out_Prefix),
                              GetUniquePar <ParBase>(DefPar.IlArithOp.Out_Postfix), outILExists))
            {
                return;
            }

            if (outVarsMustExist && !outILExists)
            {
                infoStore.communicator.ReportError(new Communicator.ErrorInfo()
                {
                    isWarning = false,
                    message   = $"{description.Get()}: using {DefPar.IlArithOp.OUT_IL_COMPONENT} in {DefPar.IlArithOp.Formula} requires incomelist {outILSpecification.ilName} to exist"
                });
                return;
            }

            if (outILExists)
            {
                if (!CheckCoreVars(outILSpecification))
                {
                    return;
                }
            }
            else
            {
                if (!RegisterOperands())
                {
                    return;
                }
            }

            PrepareFormulas();
        }
Ejemplo n.º 5
0
 private string GetCoreVarName(string fullVarName, ILSpecification ilSpecification)
 {
     return(fullVarName.Substring(ilSpecification.prefix.Length, fullVarName.Length - ilSpecification.prefix.Length - ilSpecification.postfix.Length));
 }
Ejemplo n.º 6
0
 private string GetFullVarName(string coreVarName, ILSpecification ilSpecification)
 {
     return($"{ilSpecification.prefix}{coreVarName}{ilSpecification.postfix}");
 }
Ejemplo n.º 7
0
        private void PrepareFormulas()
        {
            outSpecifications = new List <OutSpecification>();
            foreach (string coreVarName in coreVarNames)
            {
                string formula = parFormula.xmlValue;
                formula = formula.Replace(DefPar.IlArithOp.BASE_IL_COMPONENT.ToLower(), GetFullVarName(coreVarName, baseILSpecification));
                formula = formula.Replace(DefPar.IlArithOp.OUT_IL_COMPONENT.ToLower(), GetFullVarName(coreVarName, outILSpecification));
                while (formula.Contains(DefPar.IlArithOp.IL_COMPONENT.ToLower()))
                {
                    if (!ReplaceILComponent())
                    {
                        return;
                    }
                }

                OutSpecification outSpecification = new OutSpecification()
                {
                    varSpec = new VarSpec()
                    {
                        name = GetFullVarName(coreVarName, outILSpecification)
                    },
                    parFormula = new ParFormula(infoStore)
                    {
                        description = parFormula.description, xmlValue = formula
                    }
                };
                outSpecification.parFormula.CheckAndPrepare(this);
                outSpecifications.Add(outSpecification);

                bool ReplaceILComponent()
                {
                    int ilc = formula.IndexOf(DefPar.IlArithOp.IL_COMPONENT.ToLower());
                    int open = formula.IndexOf("[", ilc + 1); int close = formula.IndexOf("]", open + 2);

                    if (open < 0 || close < 0)
                    {
                        infoStore.communicator.ReportError(new Communicator.ErrorInfo()
                        {
                            isWarning = false,
                            message   = $"{parFormula.description.Get()}: invalid specification of {DefPar.IlArithOp.IL_COMPONENT}"
                        });
                        return(false);
                    }
                    string          ilIdentfier = formula.Substring(open + 1, close - open - 1);
                    string          toReplace = $"{DefPar.IlArithOp.IL_COMPONENT.ToLower()}[{ilIdentfier}]";
                    ILSpecification ilSpecification = (from ils in ilSpecifications where ils.ilName == ilIdentfier select ils).FirstOrDefault();

                    if (ilSpecification == null)
                    {
                        ilSpecification = (from ils in ilSpecifications where ils.grpNo == ilIdentfier select ils).FirstOrDefault();
                    }
                    if (ilSpecification == null)
                    {
                        infoStore.communicator.ReportError(new Communicator.ErrorInfo()
                        {
                            isWarning = false,
                            message   = $"{parFormula.description.Get()}: {toReplace}: no parameter {DefPar.IlArithOp.ILName}={ilIdentfier} found"
                        });
                        return(false);
                    }
                    formula = formula.Replace(toReplace, GetFullVarName(coreVarName, ilSpecification));
                    return(true);
                }
            }
        }