Пример #1
0
        private bool Compare(double a, double b, ParserParts parserParts)
        {
            if (parserParts == ParserParts.EqualsPred)
            {
                return(Math.Abs(a - b) < Tolerance);
            }

            if (parserParts == ParserParts.LessPred)
            {
                return(a < b);
            }

            if (parserParts == ParserParts.LessEqualPred)
            {
                return(a <= b);
            }

            if (parserParts == ParserParts.MorePred)
            {
                return(a > b);
            }

            if (parserParts == ParserParts.MoreEqualPred)
            {
                return(a >= b);
            }

            throw  new InvalidOperationException();
        }
Пример #2
0
        private bool Compare(int a, int b, ParserParts parserParts)
        {
            if (parserParts == ParserParts.EqualsPred)
            {
                return(a == b);
            }

            if (parserParts == ParserParts.LessPred)
            {
                return(a > b);
            }

            if (parserParts == ParserParts.LessEqualPred)
            {
                return(a >= b);
            }

            if (parserParts == ParserParts.MorePred)
            {
                return(a < b);
            }

            if (parserParts == ParserParts.MoreEqualPred)
            {
                return(a < b);
            }

            throw new InvalidOperationException();
        }
Пример #3
0
        protected virtual void OnParsed(ParserParts parsePart, string currentToken = "")
        {
            var e = new PartParsedEventArgs(parsePart, currentToken);

            //Console.WriteLine(e.ToString());
            PartParsed?.Invoke(this, e);
        }
Пример #4
0
        private bool TestFloatValue(QLPart part, Node secondNode, ParserParts parserParts)
        {
            var floatValue = (secondNode as CFloatNode).FloatValue;

            //int schema to float query
            if (part.QLNumber != null)
            {
                var intPropValue = part.QLNumber.Value;
                if (Compare(intPropValue, floatValue, parserParts))
                {
                    return(true);
                }
            }
            //float schema to float query
            if (part.QLFloat != null)
            {
                var floatPropValue = part.QLFloat.Value;
                if (Compare(floatPropValue, floatValue, parserParts))
                {
                    return(true);
                }
            }

            return(false);
        }
Пример #5
0
            public override void AddNode(string value, ParserParts parserPart)
            {
                switch (parserPart)
                {
                case ParserParts.EqualsPred:
                    compare = parserPart;
                    break;

                case ParserParts.MorePred:
                    compare = parserPart;
                    break;

                case ParserParts.MoreEqualPred:
                    compare = parserPart;
                    break;

                case ParserParts.LessPred:
                    compare = parserPart;
                    break;

                case ParserParts.LessEqualPred:
                    compare = parserPart;
                    break;

                case ParserParts.Number:
                    cNumberNode = new CNumberNode(value);
                    break;

                default:
                    throw new InvalidOperationException();
                }
            }
Пример #6
0
            public override void AddNode(string value, ParserParts parserPart)
            {
                if (parserPart != ParserParts.Operator)
                {
                    throw new ArgumentOutOfRangeException(nameof(parserPart), parserPart, null);
                }

                ParentFuncNode.LastStatement.SetOperator(value);
            }
Пример #7
0
            public override void AddNode(string value, ParserParts parserPart)
            {
                switch (parserPart)
                {
                case ParserParts.SetRelVar:
                    primeVariable = value;
                    break;

                case ParserParts.RelAttStr:
                    secondaryVariable.Add(value);
                    break;

                case ParserParts.EmptyRelAtt:
                    secondaryVariable.Add(EmptyRelAtts);
                    break;

                default:
                    throw new InvalidOperationException();
                }
            }
Пример #8
0
 public PartParsedEventArgs(ParserParts parsePart, string currentToken = "")
 {
     CurrentToken = currentToken;
     ParsePart    = parsePart;
 }
Пример #9
0
 public PredicateNode(Node firstNode, ParserParts compare, Node secondNode)
 {
     FirstNode  = firstNode;
     Compare    = compare;
     SecondNode = secondNode;
 }
Пример #10
0
            public override void AddNode(string value, ParserParts parserPart)
            {
                switch (parserPart)
                {
                case ParserParts.SetRelArg:
                    PrimeVariable = value;
                    break;

                case ParserParts.RelAttStr:
                    PromoteSetArgument();
                    SecondaryVariable = GetIndexOfAttribute(value);
                    break;

                case ParserParts.RelAttIndex:
                    PromoteSetArgument();
                    SecondaryVariable = FromAttIndexToNetIndex(value);
                    break;

                case ParserParts.ExAtt:
                    AddArgument(DoExAtt(value));
                    break;

                //Type Predicate
                case ParserParts.ExType:
                    TypePredNode typePredNode = null;
                    if (PrimeVariable != null && !SecondaryVariable.HasValue)
                    {
                        typePredNode = new TypePredNode(new SetNode(PrimeVariable), value);
                    }
                    else if (SecondaryVariable.HasValue)
                    {
                        var relAttNode = new RelAttNode(SecondaryVariable.Value, PrimeVariable);
                        typePredNode = new TypePredNode(relAttNode, value);
                    }
                    AddArgument(typePredNode);
                    PrimeVariable     = null;
                    SecondaryVariable = null;
                    break;



                //constants
                case ParserParts.String:
                    ParentFuncNode.LastStatement.AddArgument(new CStringNode(value));
                    break;

                case ParserParts.Number:
                    ParentFuncNode.LastStatement.AddArgument(new CNumberNode(value));
                    break;

                case ParserParts.Float:
                    ParentFuncNode.LastStatement.AddArgument(new CFloatNode(value));
                    break;

                case ParserParts.Bool:
                    ParentFuncNode.LastStatement.AddArgument(new CBoolNode(value));
                    break;

                default:
                    throw new InvalidOperationException();
                }
            }
Пример #11
0
            public override void AddNode(string value, ParserParts parserPart)
            {
                switch (parserPart)
                {
                case ParserParts.EqualsPred:
                    Compare = parserPart;
                    return;

                case ParserParts.InPred:
                    Compare = parserPart;
                    return;

                case ParserParts.MorePred:
                    Compare = parserPart;
                    return;

                case ParserParts.MoreEqualPred:
                    Compare = parserPart;
                    return;

                case ParserParts.LessPred:
                    Compare = parserPart;
                    return;

                case ParserParts.LessEqualPred:
                    Compare = parserPart;
                    return;

                case ParserParts.String:
                    AttributeAccessNodeEnd = new CStringNode(value);
                    return;

                case ParserParts.Number:
                    AttributeAccessNodeEnd = new CNumberNode(value);
                    return;

                case ParserParts.Float:
                    AttributeAccessNodeEnd = new CFloatNode(value);
                    return;

                case ParserParts.Bool:
                    AttributeAccessNodeEnd = new CBoolNode(value);
                    return;

                case ParserParts.SetRelArg:
                    PrimeVariable = value;
                    break;

                case ParserParts.RelAttStr:
                    SecondaryVariable = GetIndexOfAttribute(value);
                    break;

                case ParserParts.RelAttIndex:
                    SecondaryVariable = FromAttIndexToNetIndex(value);
                    break;

                case ParserParts.ExAtt:
                    AttributeAccessNodeEnd = DoExAtt(value);
                    break;
                }
            }
Пример #12
0
 public override void AddNode(string value, ParserParts parserPart)
 {
     ParentFuncNode.AddStatement(new StatementNode());
 }
Пример #13
0
            public override void AddNode(string value, ParserParts parserPart)
            {
                switch (parserPart)
                {
                case ParserParts.DefOp:
                    if (GlobalFunctionId == value)
                    {
                        astBuilder.globalFunctionNode  = new FunctionNode(value);
                        astBuilder.currentFunctionNode = astBuilder.globalFunctionNode;
                    }
                    else
                    {
                        var userFuncNode = new UserFunctionNode(value);
                        astBuilder.globalFunctionNode.UserFunctions.Add(userFuncNode);
                        astBuilder.currentFunctionNode = userFuncNode;
                    }
                    break;

                case ParserParts.DefAlias:
                    if (!value.StartsWith(":"))
                    {
                        throw new ArgumentException("Alias does not start with :");
                    }
                    ((UserFunctionNode)astBuilder.currentFunctionNode).Alias = value.Substring(1, value.Length - 1);
                    break;

                case ParserParts.SetRelFormalArg:
                    //((UserFunctionNode)astBuilder.currentFunctionNode).AddArguement(); = value;
                    break;

                case ParserParts.SetRelArg:
                    primeVariable = value;
                    break;

                case ParserParts.RelAttStr:
                    var strInt = new StrInt(value, null);
                    secondaryVariable.Add(strInt);
                    break;

                case ParserParts.RelAttIndex:
                    var strInt2 = new StrInt(null, int.Parse(value) - 1);
                    secondaryVariable.Add(strInt2);
                    break;

                case ParserParts.SetRelFormalArgEnd:
                    if (secondaryVariable.Count == 0)
                    {
                        ((UserFunctionNode)astBuilder.currentFunctionNode).AddArguement(new SetNode(primeVariable));
                    }
                    else
                    {
                        var relation = new RelationNode(primeVariable);     //todo numeric index bzw empty args
                        relation.Attributes = secondaryVariable.Select(t => t.Item1).ToList();
                        ((UserFunctionNode)astBuilder.currentFunctionNode).AddArguement(relation);
                    }

                    primeVariable = null;
                    secondaryVariable.Clear();
                    break;

                default:
                    throw new InvalidOperationException();
                }
            }
Пример #14
0
 public abstract void AddNode(string value, ParserParts parserPart);