예제 #1
0
 private ReplaceToken(Scope scope, ReplaceStartToken startToken)
     : base(scope)
 {
     _startToken = startToken;
     _startToken.ReplaceToken = this;
     AddToken(startToken);
 }
예제 #2
0
        public static ReplaceToken Parse(Scope scope, ReplaceStartToken startToken)
        {
#if DEBUG
            if (startToken == null)
            {
                throw new ArgumentNullException("replaceToken");
            }
#endif
            var scopeIndent = scope.CloneIndent();

            var ret = new ReplaceToken(scope, startToken);

            var done = false;
            while (!done && !scope.Code.EndOfFile)
            {
                var stmt = StatementToken.TryParse(scopeIndent, t =>
                {
                    if (t is ReplaceEndToken)
                    {
                        ret._endToken = t as ReplaceEndToken;
                        ret._endToken.ReplaceToken = ret;
                        done = true;
                    }
                    else if (ret._withToken == null)
                    {
                        if (t is ReplaceWithToken)
                        {
                            ret._withToken = t as ReplaceWithToken;
                            ret._withToken.ReplaceToken = ret;
                        }
                        else
                        {
                            ret._oldTokens.Add(t);
                        }
                    }
                    else
                    {
                        ret._newTokens.Add(t);
                    }
                });
            }

            return(ret);
        }