示例#1
0
        public static ImportExpression Parse(ExpressionWalker ew)
        {
            ew.IsCurrentOrThrow(ExpressionToken.Import);
            ew.NextOrThrow();

            // ReSharper disable once UseObjectOrCollectionInitializer
            var ret = new ImportExpression();

            if (ew.IsCurrent(ExpressionToken.StringLiteral))
            {
                ret._matchType = new RegexResult[] { ew.Current.Match.AsResult() };
                ret.Type       = ew.Current.Match.Value.Trim('\"');
            }
            else
            {
                ret._matchType = ew.TakeForwardWhile(t => t.Token == ExpressionToken.Period || t.Token == ExpressionToken.Literal)
                                 .Select(t => t.Match.AsResult()).ToArray();

                ret.Type = ret._matchType.Select(m => m.Value).StringJoin();

                if (ew.IsCurrent(ExpressionToken.As))
                {
                    ret._matchAlias = ew.Next(ExpressionToken.Literal, true).Match.AsResult();
                    ret.As          = ret._matchAlias.Value;
                }
            }

            ew.Next();
            return(ret);
        }