コード例 #1
0
        public static string ParseMultiplicity(string identifier, NParsedAttributeValue parameters)
        {
            var parameter = ((NParsedAttributeAtomic)parameters).Value;

            if (parameter is IdentifierExpression)
            {
                string value = ((IdentifierExpression)parameter).Value;
                if (string.IsNullOrWhiteSpace(value))
                {
                    throw new InvalidParameterAttributeException(identifier,
                                                                 InvalidParameterAttributeException.INVALID_VALUE);
                }
                return(value);
            }

            if (parameter is StarExpression)
            {
                return("*");
            }

            if (parameter is ParsedInteger)
            {
                int value = ((ParsedInteger)parameter).Value;
                if (value < 0)
                {
                    throw new InvalidParameterAttributeException(identifier,
                                                                 InvalidParameterAttributeException.INVALID_VALUE);
                }
                return(value.ToString());
            }

            throw new InvalidParameterAttributeException(identifier,
                                                         InvalidParameterAttributeException.INVALID_VALUE);
        }
コード例 #2
0
        public ParsedElement ParsedAttribute(string identifier, NParsedAttributeValue parameters, NParsedAttributeValue value)
        {
            if (parameters != null)
            {
                throw new InvalidParameterAttributeException(identifier,
                                                             InvalidParameterAttributeException.NO_PARAM);
            }

            if (!(value is NParsedAttributeAtomic))
            {
                throw new InvalidAttributeValueException(identifier,
                                                         InvalidAttributeValueException.ATOMIC_ONLY);
            }

            var v = ((NParsedAttributeAtomic)value).Value;

            if (!(v is ParsedBool))
            {
                throw new InvalidAttributeValueException(identifier,
                                                         InvalidAttributeValueException.BOOL);
            }

            return(new DefaultValueAttribute()
            {
                Value = ((ParsedBool)((NParsedAttributeAtomic)value).Value).Value
            });
        }
コード例 #3
0
        public ParsedElement ParsedAttribute(string identifier, NParsedAttributeValue parameters, NParsedAttributeValue value)
        {
            if (parameters != null)
            {
                throw new InvalidParameterAttributeException(identifier,
                                                             InvalidParameterAttributeException.NO_PARAM);
            }

            if (!(value is NParsedAttributeAtomic))
            {
                throw new InvalidAttributeValueException(identifier,
                                                         InvalidAttributeValueException.ATOMIC_ONLY);
            }

            var v = ((NParsedAttributeAtomic)value).Value;

            if (!(v is ParsedString))
            {
                throw new InvalidAttributeValueException(identifier,
                                                         InvalidAttributeValueException.STRING);
            }
            var stringValue = (ParsedString)v;

            return(new ParsedCustomAttribute()
            {
                Key = identifier,
                Value = stringValue.Value
            });
        }
コード例 #4
0
        public ParsedElement ParsedAttribute(string identifier, NParsedAttributeValue parameters, NParsedAttributeValue value)
        {
            if (parameters != null)
            {
                throw new InvalidParameterAttributeException(identifier,
                                                             InvalidParameterAttributeException.NO_PARAM);
            }

            if (!(value is NParsedAttributeAtomic))
            {
                throw new InvalidAttributeValueException(identifier,
                                                         InvalidAttributeValueException.ATOMIC_ONLY);
            }

            var v = ((NParsedAttributeAtomic)value).Value;

            if (!(v is IdentifierExpression))
            {
                throw new InvalidAttributeValueException(identifier,
                                                         InvalidAttributeValueException.IDENTIFIER);
            }


            return(new ParsedContextAttribute()
            {
                Value = ((NParsedAttributeAtomic)value).Value
            });
        }
コード例 #5
0
        public ParsedElement ParsedAttribute(string identifier, NParsedAttributeValue parameters, NParsedAttributeValue value)
        {
            if (parameters != null)
            {
                throw new InvalidParameterAttributeException(identifier,
                                                             InvalidParameterAttributeException.NO_PARAM);
            }

            if (value is NParsedAttributeColon)
            {
                var colonValue = ((NParsedAttributeColon)value);
                var left       = colonValue.Left;
                var right      = colonValue.Right;

                if (!(left is IdentifierExpression) | !(right is IdentifierExpression))
                {
                    throw new InvalidAttributeValueException(identifier,
                                                             InvalidAttributeValueException.IDENTIFIER);
                }

                var leftIdentifier = ((IdentifierExpression)left).Value;

                return(new ParsedPredicateArgumentAttribute(leftIdentifier, right));
            }

            throw new InvalidAttributeValueException(identifier,
                                                     InvalidAttributeValueException.COLON_ONLY);
        }
コード例 #6
0
        public ParsedElement ParsedAttribute(string identifier, NParsedAttributeValue parameters, NParsedAttributeValue value)
        {
            if (!(value is NParsedAttributeAtomic))
            {
                throw new InvalidAttributeValueException(identifier,
                                                         InvalidAttributeValueException.ATOMIC_ONLY);
            }

            var v = ((NParsedAttributeAtomic)value).Value;

            if (!(v is IdentifierExpression))
            {
                throw new InvalidAttributeValueException(identifier,
                                                         InvalidAttributeValueException.IDENTIFIER);
            }

            string multiplicity = "";

            if (parameters != null)
            {
                if (parameters is NParsedAttributeAtomic)
                {
                    multiplicity = ParseMultiplicity(identifier, parameters);
                }
                else if (parameters is NParsedAttributeList)
                {
                    if (((NParsedAttributeList)parameters).Values.Count != 2)
                    {
                        throw new InvalidParameterAttributeException(identifier,
                                                                     InvalidParameterAttributeException.INVALID_VALUE);
                    }

                    var    firstParameter  = ((NParsedAttributeList)parameters).Values [0];
                    var    secondParameter = ((NParsedAttributeList)parameters).Values [1];
                    string m1 = ParseMultiplicity(identifier, firstParameter);
                    string m2 = ParseMultiplicity(identifier, secondParameter);

                    multiplicity = m1 + ".." + m2;
                }
                else
                {
                    throw new InvalidParameterAttributeException(identifier,
                                                                 InvalidParameterAttributeException.ATOMIC_OR_LIST);
                }
            }

            return(new ParsedLinkAttribute()
            {
                Target = ((NParsedAttributeAtomic)value).Value,
                Multiplicity = multiplicity
            });
        }
コード例 #7
0
        public ParsedElement ParsedAttribute(string identifier, NParsedAttributeValue parameters, NParsedAttributeValue value)
        {
            if (parameters != null)
            {
                throw new InvalidParameterAttributeException(identifier,
                                                             InvalidParameterAttributeException.NO_PARAM);
            }

            if (!(value is NParsedAttributeAtomic))
            {
                throw new InvalidAttributeValueException(identifier,
                                                         InvalidAttributeValueException.ATOMIC_ONLY);
            }

            var v = ((NParsedAttributeAtomic)value).Value;

            if (!(v is IdentifierExpression))
            {
                throw new InvalidAttributeValueException(identifier,
                                                         InvalidAttributeValueException.IDENTIFIER);
            }

            var v2 = (IdentifierExpression)v;

            switch (v2.Value)
            {
            case "software":
                return(new ParsedAgentTypeAttribute()
                {
                    Value = ParsedAgentType.Software
                });

            case "environment":
                return(new ParsedAgentTypeAttribute()
                {
                    Value = ParsedAgentType.Environment
                });

            case "malicious":
                return(new ParsedAgentTypeAttribute()
                {
                    Value = ParsedAgentType.Malicious
                });

            default:
                throw new InvalidAttributeValueException(identifier,
                                                         InvalidAttributeValueException.INVALID_VALUE);
            }
        }
コード例 #8
0
ファイル: DeclareParser.cs プロジェクト: ancailliau/KAOSTools
        public ParsedElement ParsedAttribute(string identifier, NParsedAttributeValue parameters, NParsedAttributeValue value)
        {
            foreach (var parser in attributeParsers)
            {
                var regexString = @"^" + parser.GetIdentifier() + "$";
                var regex       = new Regex(regexString);
                var match       = regex.Match(identifier);
                if (match.Success)
                {
                    return(parser.ParsedAttribute(identifier, parameters, value));
                }
            }

            throw new NotImplementedException("The attribute " + identifier + " is not valid for " + GetIdentifier() + ".");
        }
コード例 #9
0
        public ParsedElement ParsedAttribute(string identifier, NParsedAttributeValue parameters, NParsedAttributeValue value)
        {
            if (parameters != null)
            {
                throw new InvalidParameterAttributeException(identifier,
                                                             InvalidParameterAttributeException.NO_PARAM);
            }

            if (!(value is NParsedAttributeAtomic))
            {
                throw new InvalidAttributeValueException(identifier,
                                                         InvalidAttributeValueException.ATOMIC_ONLY);
            }

            var v = ((NParsedAttributeAtomic)value).Value;

            double rds = 1;

            if (v is ParsedFloat)
            {
                rds = ((ParsedFloat)v).Value;
            }
            else if (v is ParsedInteger)
            {
                rds = ((ParsedInteger)v).Value * 1d; // ntm: ignore 008b (Mul => Div)
            }
            else if (v is ParsedPercentage)
            {
                rds = ((ParsedPercentage)v).Value / 100;
            }
            else
            {
                throw new InvalidAttributeValueException(identifier,
                                                         InvalidAttributeValueException.FLOAT_INTEGER_PERCENTAGE_ONLY);
            }

            if (rds < 0 | rds > 1) // ntm: ignore 00de (Or => Xor)
            {
                throw new InvalidAttributeValueException(identifier,
                                                         InvalidAttributeValueException.PROBABILITY_EXPECTED);
            }

            return(new ParsedRDSAttribute()
            {
                Value = rds
            });
        }
コード例 #10
0
        public ParsedElement ParsedAttribute(string identifier, NParsedAttributeValue parameters, NParsedAttributeValue value)
        {
            if (parameters != null)
            {
                throw new InvalidParameterAttributeException(identifier,
                                                             InvalidParameterAttributeException.NO_PARAM);
            }

            string  leftIdentifier = null;
            dynamic type           = null;

            if (value is NParsedAttributeColon)
            {
                var colonValue = ((NParsedAttributeColon)value);
                var left       = colonValue.Left;
                var right      = colonValue.Right;

                if (!(left is IdentifierExpression) | !(right is IdentifierExpression))
                {
                    throw new InvalidAttributeValueException(identifier,
                                                             InvalidAttributeValueException.IDENTIFIER);
                }

                leftIdentifier = ((IdentifierExpression)left).Value;
                type           = right;
            }
            else if (value is NParsedAttributeAtomic)
            {
                var atomicValue = ((NParsedAttributeAtomic)value).Value;
                if (atomicValue is IdentifierExpression)
                {
                    leftIdentifier = ((IdentifierExpression)atomicValue).Value;
                }
                else
                {
                    throw new InvalidAttributeValueException(identifier,
                                                             InvalidAttributeValueException.IDENTIFIER);
                }
            }
            else
            {
                throw new InvalidAttributeValueException(identifier,
                                                         InvalidAttributeValueException.ATOMIC_OR_COLON);
            }

            return(new ParsedAttributeAttribute(leftIdentifier, type));
        }
コード例 #11
0
        public void TestNotAtomicValue(NParsedAttributeValue v)
        {
            var          ap            = new ResolvedByAttributeParser();
            const string attIdentifier = "resolvedBy";

            var e = Assert.Catch(() => {
                ap.ParsedAttribute(attIdentifier,
                                   null,
                                   v);
            });

            Assert.IsInstanceOf(typeof(InvalidAttributeValueException), e);
            StringAssert.AreEqualIgnoringCase(
                string.Format(InvalidAttributeValueException.ATOMIC_ONLY, attIdentifier),
                e.Message
                );
        }
コード例 #12
0
        public void TestNotColonParameter(NParsedAttributeValue v)
        {
            var          ap            = new ResolvedByAttributeParser();
            const string attIdentifier = "resolvedBy";

            var e = Assert.Catch(() => {
                ap.ParsedAttribute(attIdentifier,
                                   v,
                                   new NParsedAttributeAtomic(new IdentifierExpression(attIdentifier)));
            });

            Assert.IsInstanceOf(typeof(InvalidParameterAttributeException), e);
            StringAssert.AreEqualIgnoringCase(
                string.Format(InvalidParameterAttributeException.COLON_ONLY, attIdentifier),
                e.Message
                );
        }
コード例 #13
0
        public void TestNotColonValue(NParsedAttributeValue v)
        {
            var          ap            = new ArgumentAttributeParser();
            const string attIdentifier = "argument";

            var e = Assert.Catch(() => {
                ap.ParsedAttribute(attIdentifier,
                                   null,
                                   v);
            });

            Assert.IsInstanceOf(typeof(InvalidAttributeValueException), e);
            StringAssert.AreEqualIgnoringCase(
                string.Format(InvalidAttributeValueException.COLON_ONLY, attIdentifier),
                e.Message
                );
        }
コード例 #14
0
        public ParsedElement ParsedAttribute(string identifier, NParsedAttributeValue parameters, NParsedAttributeValue value)
        {
            if (parameters != null)
            {
                throw new InvalidParameterAttributeException(identifier,
                                                             InvalidParameterAttributeException.NO_PARAM);
            }

            if (!(value is NParsedAttributeAtomic))
            {
                throw new InvalidAttributeValueException(identifier,
                                                         InvalidAttributeValueException.ATOMIC_ONLY);
            }

            return(new ParsedFormalSpecAttribute()
            {
                Value = ((NParsedAttributeAtomic)value).Value
            });
        }
コード例 #15
0
        public ParsedElement ParsedAttribute(string identifier, NParsedAttributeValue parameters, NParsedAttributeValue value)
        {
            if (parameters == null)
            {
                throw new InvalidParameterAttributeException(identifier,
                                                             InvalidParameterAttributeException.NO_PARAM);
            }

            if (!(parameters is NParsedAttributeAtomic))
            {
                throw new InvalidParameterAttributeException(identifier,
                                                             InvalidParameterAttributeException.ATOMIC_ONLY);
            }

            if (!(value is NParsedAttributeAtomic))
            {
                throw new InvalidAttributeValueException(identifier,
                                                         InvalidAttributeValueException.ATOMIC_ONLY);
            }

            var p = ((NParsedAttributeAtomic)parameters).Value;
            var v = ((NParsedAttributeAtomic)value).Value;

            if (!(p is IdentifierExpression))
            {
                throw new InvalidParameterAttributeException(identifier,
                                                             InvalidAttributeValueException.IDENTIFIER);
            }
            var pValue = (IdentifierExpression)p;

            if (!(v is IdentifierExpression))
            {
                throw new InvalidAttributeValueException(identifier,
                                                         InvalidAttributeValueException.IDENTIFIER);
            }
            var stringValue = (IdentifierExpression)v;

            return(new ParsedReplacesAttribute()
            {
                ObstacleIdentifier = pValue.Value,
                ReplacedGoalIdentifier = stringValue.Value
            });
        }
コード例 #16
0
        public ParsedElement ParsedAttribute(string identifier, NParsedAttributeValue parameters, NParsedAttributeValue value)
        {
            string expert_id = null;

            if (parameters != null)
            {
                if (parameters is NParsedAttributeAtomic)
                {
                    var parameter = ((NParsedAttributeAtomic)parameters).Value;
                    if (parameter is IdentifierExpression)
                    {
                        expert_id = ((IdentifierExpression)parameter).Value;
                    }
                    else
                    {
                        throw new InvalidParameterAttributeException(identifier,
                                                                     InvalidParameterAttributeException.IDENTIFIER);
                    }
                }
                else
                {
                    throw new InvalidParameterAttributeException(identifier,
                                                                 InvalidParameterAttributeException.ATOMIC_ONLY);
                }
            }

            if (value is NParsedAttributeAtomic)
            {
                return(ParseAtomic(identifier, value, expert_id));
            }
            else if (value is NParsedAttributeBracket)
            {
                return(ParseBracket(identifier, value, expert_id));
            }
            else
            {
                throw new InvalidAttributeValueException(identifier,
                                                         InvalidAttributeValueException.ATOMIC_OR_BRACKET);
            }
        }
コード例 #17
0
        public ParsedElement ParsedAttribute(string identifier, NParsedAttributeValue parameters, NParsedAttributeValue value)
        {
            if (parameters != null)
            {
                throw new NotImplementedException();
            }

            var parsedPredicates = new List <string>();

            if (value is NParsedAttributeAtomic)
            {
                AddChild((NParsedAttributeAtomic)value, parsedPredicates);
            }
            else if (value is NParsedAttributeList)
            {
                foreach (var item in ((NParsedAttributeList)value).Values)
                {
                    if (item is NParsedAttributeAtomic)
                    {
                        AddChild((NParsedAttributeAtomic)item, parsedPredicates);
                    }

                    else
                    {
                        throw new NotImplementedException("Attribute '" + identifier + "' only accept a list of identifiers. (Received: " +
                                                          string.Join(",", parsedPredicates.Select(x => x.GetType().ToString())) + ")");
                    }
                }
            }
            else
            {
                throw new NotImplementedException("Attribute '" + identifier + "' only accept an atomic value or a list of atomic values.");
            }

            return(new ParsedMonitorsAttribute()
            {
                ParsedPredicates = parsedPredicates
            });
        }
コード例 #18
0
        private static ParsedElement ParseAtomic(string identifier, NParsedAttributeValue value, string expert_id)
        {
            var    v   = ((NParsedAttributeAtomic)value).Value;
            double esr = -1;

            if (v is ParsedFloat)
            {
                esr = ((ParsedFloat)v).Value;
            }
            else if (v is ParsedInteger)
            {
                esr = ((ParsedInteger)v).Value;
            }
            else if (v is ParsedDecimal)
            {
                esr = System.Convert.ToDouble(((ParsedDecimal)v).Value);
            }
            else if (v is ParsedPercentage)
            {
                esr = ((ParsedPercentage)v).Value / 100d;
            }
            else
            {
                throw new InvalidAttributeValueException(identifier,
                                                         InvalidAttributeValueException.FLOAT_INTEGER_PERCENTAGE_ONLY);
            }

            if (esr < 0 | esr > 1) // ntm: ignore 00de (Or => Xor)
            {
                throw new InvalidAttributeValueException(identifier,
                                                         InvalidAttributeValueException.PROBABILITY_EXPECTED);
            }

            return(new ParsedProbabilityAttribute()
            {
                Value = esr, ExpertIdentifier = expert_id
            });
        }
コード例 #19
0
        public ParsedElement ParsedAttribute(string identifier,
                                             NParsedAttributeValue parameters,
                                             NParsedAttributeValue value)
        {
            if (parameters != null)
            {
                throw new InvalidParameterAttributeException(identifier,
                                                             InvalidParameterAttributeException.NO_PARAM);
            }

            List <ParsedElement> v = new List <ParsedElement>();

            if (value is NParsedAttributeAtomic)
            {
                AddValueToList(identifier, value, v);
            }
            else if (value is NParsedAttributeList)
            {
                var list = ((NParsedAttributeList)value);

                foreach (var item in list.Values)
                {
                    AddValueToList(identifier, item, v);
                }
            }
            else
            {
                throw new InvalidAttributeValueException(identifier,
                                                         InvalidAttributeValueException.ATOMIC_OR_LIST);
            }

            // TODO Remove casting and toList
            return(new ParsedAssignedToAttribute()
            {
                Values = v.Cast <dynamic>().ToList()
            });
        }
コード例 #20
0
        private static ParsedElement ParseBracket(string identifier, NParsedAttributeValue value, string expert_id)
        {
            var item  = ((NParsedAttributeBracket)value).Item;
            var param = ((NParsedAttributeBracket)value).Parameter;

            // Parse the name of the distribution
            string distribution_name = ParseDistributionName(identifier, item);

            // Parse the parameters of the distribution
            List <double> distribution_parameters = ParseDistributionParameter(identifier, param);

            // Build the parsed element
            switch (distribution_name)
            {
            case "beta":
                return(ParseBeta(identifier, distribution_parameters, expert_id));

            case "uniform":
                return(ParseUniform(identifier, distribution_parameters, expert_id));

            case "triangular":
                return(ParseTriangular(identifier, distribution_parameters, expert_id));

            case "pert":
            case "PERT":
                return(ParsePERT(identifier, distribution_parameters, expert_id));

            case "quantile":
            case "quantiles":
                return(ParseQuantile(identifier, distribution_parameters, expert_id));

            default:
                throw new InvalidAttributeValueException(identifier,
                                                         InvalidAttributeValueException.INVALID_VALUE);
            }
        }
コード例 #21
0
        public ParsedElement ParsedAttribute(string identifier, NParsedAttributeValue parameters, NParsedAttributeValue value)
        {
            ParsedResolutionPattern pattern = null;
            string anchorId = null;

            if (parameters != null)
            {
                if (parameters is NParsedAttributeColon)
                {
                    var p = (NParsedAttributeColon)parameters;

                    var left = p.Left;
                    if (left is IdentifierExpression)
                    {
                        var patternId = ((IdentifierExpression)left).Value;
                        pattern = new ParsedResolutionPattern(patternId);
                    }
                    else
                    {
                        throw new InvalidParameterAttributeException(identifier,
                                                                     InvalidParameterAttributeException.IDENTIFIER);
                    }

                    var right = p.Right;
                    if (right is IdentifierExpression)
                    {
                        anchorId = ((IdentifierExpression)right).Value;
                    }
                    else
                    {
                        throw new InvalidParameterAttributeException(identifier,
                                                                     InvalidParameterAttributeException.IDENTIFIER);
                    }
                }
                else
                {
                    throw new InvalidParameterAttributeException(identifier,
                                                                 InvalidParameterAttributeException.COLON_ONLY);
                }
            }

            if (!(value is NParsedAttributeAtomic))
            {
                throw new InvalidAttributeValueException(identifier,
                                                         InvalidAttributeValueException.ATOMIC_ONLY);
            }

            var v = ((NParsedAttributeAtomic)value).Value;

            if (!(v is IdentifierExpression))
            {
                throw new InvalidAttributeValueException(identifier,
                                                         InvalidAttributeValueException.IDENTIFIER);
            }

            return(new ParsedResolvedByAttribute()
            {
                Value = ((NParsedAttributeAtomic)value).Value,
                Pattern = pattern,
                AnchorId = anchorId
            });
        }
コード例 #22
0
        public ParsedElement ParsedAttribute(string identifier, NParsedAttributeValue parameters, NParsedAttributeValue value)
        {
            parsedRefinementPattern = null;
            contextIdentifier       = null;

            if (parameters != null)
            {
                ParseParameter(identifier, parameters);
            }

            var parsedRefinees = new List <ParsedRefinee>();

            if (value is NParsedAttributeAtomic)
            {
                AddChild((NParsedAttributeAtomic)value, parsedRefinees);
            }
            else if (value is NParsedAttributeList)
            {
                foreach (var item in ((NParsedAttributeList)value).Values)
                {
                    if (item is NParsedAttributeAtomic)
                    {
                        AddChild((NParsedAttributeAtomic)item, parsedRefinees);
                    }
                    else if (item is NParsedAttributeBracket)
                    {
                        var child            = ((NParsedAttributeBracket)item).Item;
                        var parameters_child = ((NParsedAttributeBracket)item).Parameter;

                        var refinee = new ParsedRefinee();

                        if (child is IdentifierExpression)
                        {
                            refinee.Identifier = ((IdentifierExpression)child).Value;
                        }
                        else
                        {
                            throw new NotImplementedException();
                        }

                        // TODO fix this
                        if (parameters_child is NParsedAttributeAtomic)
                        {
                            var parameter_child = ((NParsedAttributeAtomic)parameters_child).Value;
                            if (parameter_child is ParsedFloat)
                            {
                                refinee.Parameters = new ParsedPrimitiveRefineeParameter <double>(((ParsedFloat)parameter_child).Value);
                            }
                            else if (parameter_child is ParsedInteger)
                            {
                                refinee.Parameters = new ParsedPrimitiveRefineeParameter <double>(((ParsedInteger)parameter_child).Value);
                            }
                            else
                            {
                                throw new NotImplementedException(parameter_child.GetType().ToString() + " " + parameter_child.ToString());
                            }
                        }
                        else
                        {
                            throw new NotImplementedException();
                        }

                        parsedRefinees.Add(refinee);
                    }
                    else
                    {
                        throw new NotImplementedException("Attribute '" + identifier + "' only accept a list of identifiers. (Received: " +
                                                          string.Join(",", parsedRefinees.Select(x => x.GetType().ToString())) + ")");
                    }
                }
            }
            else
            {
                throw new NotImplementedException("Attribute '" + identifier + "' only accept an atomic value or a list of atomic values.");
            }

            // TODO Remove casting and toList
            return(new ParsedRefinedByAttribute()
            {
                ParsedRefinees = parsedRefinees,
                RefinementPattern = parsedRefinementPattern,
                ContextIdentifier = contextIdentifier,
            });
        }