Esempio n. 1
0
        public static (object, FunnyType) ParseValue(this TokFlow flow)
        {
            var syntaxNode = SyntaxNodeReader.ReadNodeOrNull(flow);

            return(ParseSyntaxNode(syntaxNode));
        }
Esempio n. 2
0
        public static ExprListError GetExpressionListError(
            int openBracketTokenPos, TokFlow flow, TokType openBrack, TokType closeBrack)
        {
            flow.Move(openBracketTokenPos);
            var obrStart = flow.Current.Start;

            flow.MoveIfOrThrow(openBrack);

            var list         = new List <ISyntaxNode>();
            int currentToken = flow.CurrentTokenPosition;

            do
            {
                if (flow.IsCurrent(TokType.Sep))
                {
                    //[,] <-first element missed
                    if (!list.Any())
                    {
                        return(new ExprListError(
                                   ExprListErrorType.FirstElementMissed,
                                   list,
                                   new Interval(flow.Current.Start, flow.Current.Finish)));
                    }

                    //[x, ,y] <- element missed
                    return(new ExprListError(
                               ExprListErrorType.ElementMissed,
                               list,
                               new Interval(list.Last().Interval.Finish, flow.Current.Finish)));
                }

                var exp = SyntaxNodeReader.ReadNodeOrNull(flow);
                if (exp != null)
                {
                    list.Add(exp);
                }
                if (exp == null && list.Any())
                {
                    flow.Move(currentToken);
                    //[x,y, {no or bad expression here} ...
                    return(SpecifyArrayInitError(list, flow, openBrack, closeBrack));
                }
                currentToken = flow.CurrentTokenPosition;
            } while (flow.MoveIf(TokType.Sep));

            if (flow.Current.Is(closeBrack))
            {
                //everything seems fine...
                return(new ExprListError(
                           ExprListErrorType.TotalyWrongDefinition,
                           list, new Interval(obrStart, flow.Current.Finish)));
            }

            if (!list.Any())
            {
                return(new ExprListError(ExprListErrorType.SingleOpenBracket, list,
                                         new Interval(obrStart, obrStart + 1)));
            }

            var position       = flow.CurrentTokenPosition;
            var nextExpression = SyntaxNodeReader.ReadNodeOrNull(flow);

            flow.Move(position);

            if (nextExpression != null)//[x y] <- separator is missed
            {
                return(new ExprListError(ExprListErrorType.SepIsMissing,
                                         list, new Interval(list.Last().Interval.Finish, nextExpression.Interval.Start)));
            }
            //[x {some crappy crap here}]
            return(SpecifyArrayInitError(list, flow, openBrack, closeBrack));
        }
Esempio n. 3
0
        private void AssertParsed(ISyntaxNode node, string expectedExpr)
        {
            var expectedExpression = SyntaxNodeReader.ReadNodeOrNull(Tokenizer.ToFlow(expectedExpr));

            AssertEquals(expectedExpression, node);
        }