Example #1
0
        }//method

        #endregion

        #region VS Integration methods
        //Use this method for VS integration; VS language package requires scanner that returns tokens one-by-one.
        // Start and End positions required by this scanner may be derived from Token :
        //   start=token.Location.Position; end=start + token.Length;
        public Token VsReadToken(ref int state)
        {
            Context.VsLineScanState.Value = state;
            if (Context.SourceStream.EOF())
            {
                return(null);
            }
            if (state == 0)
            {
                NextToken();
            }
            else
            {
                Terminal term = Data.MultilineTerminals[Context.VsLineScanState.TerminalIndex - 1];
                Context.CurrentToken = term.TryMatch(Context, Context.SourceStream);
            }
            //set state value from context
            state = Context.VsLineScanState.Value;
            if (Context.CurrentToken != null && Context.CurrentToken.Terminal == _grammar.Eof)
            {
                return(null);
            }
            return(Context.CurrentToken);
        }