Boo.Lang.Parser.BooLexer.mTRIPLE_QUOTED_STRING C# (CSharp) Method

mTRIPLE_QUOTED_STRING() protected method

protected mTRIPLE_QUOTED_STRING ( bool _createToken ) : void
_createToken bool
return void
        protected void mTRIPLE_QUOTED_STRING(bool _createToken)
        {
            int _ttype; IToken _token=null; int _begin=text.Length;
            _ttype = TRIPLE_QUOTED_STRING;

            int _saveIndex = 0;
            _saveIndex = text.Length;
            match("\"\"");
            text.Length = _saveIndex;
            {    // ( ... )*
            for (;;)
            {
                // nongreedy exit test
                if ((cached_LA1=='"') && (cached_LA2=='"') && (LA(3)=='"')) goto _loop775_breakloop;
                bool synPredMatched769 = false;
                if (((cached_LA1=='$') && (cached_LA2=='('||cached_LA2=='{') && ((LA(3) >= '\u0003' && LA(3) <= '\ufffe'))))
                {
                    int _m769 = mark();
                    synPredMatched769 = true;
                    inputState.guessing++;
                    try {
                        {
                            if ((cached_LA1=='$') && (cached_LA2=='{'))
                            {
                                match("${");
                            }
                            else if ((cached_LA1=='$') && (cached_LA2=='(')) {
                                match("$(");
                            }
                            else
                            {
                                throw new NoViableAltForCharException(cached_LA1, getFilename(), getLine(), getColumn());
                            }

                        }
                    }
                    catch (RecognitionException)
                    {
                        synPredMatched769 = false;
                    }
                    rewind(_m769);
                    inputState.guessing--;
                }
                if ( synPredMatched769 )
                {
                    if (0==inputState.guessing)
                    {

                                    Enqueue(makeToken(TRIPLE_QUOTED_STRING), text.ToString(_begin, text.Length-_begin));
                                    text.Length = _begin; text.Append("");

                    }
                    mINTERPOLATED_EXPRESSION(false);
                }
                else {
                    bool synPredMatched771 = false;
                    if (((cached_LA1=='$') && (tokenSet_0_.member(cached_LA2)) && ((LA(3) >= '\u0003' && LA(3) <= '\ufffe'))))
                    {
                        int _m771 = mark();
                        synPredMatched771 = true;
                        inputState.guessing++;
                        try {
                            {
                                match('$');
                                mID(false);
                            }
                        }
                        catch (RecognitionException)
                        {
                            synPredMatched771 = false;
                        }
                        rewind(_m771);
                        inputState.guessing--;
                    }
                    if ( synPredMatched771 )
                    {
                        if (0==inputState.guessing)
                        {

                                        Enqueue(makeToken(TRIPLE_QUOTED_STRING), text.ToString(_begin, text.Length-_begin));
                                        text.Length = _begin; text.Append("");

                        }
                        mINTERPOLATED_REFERENCE(false);
                    }
                    else {
                        bool synPredMatched773 = false;
                        if (((cached_LA1=='\\') && (cached_LA2=='$') && ((LA(3) >= '\u0003' && LA(3) <= '\ufffe'))))
                        {
                            int _m773 = mark();
                            synPredMatched773 = true;
                            inputState.guessing++;
                            try {
                                {
                                    match("\\$");
                                }
                            }
                            catch (RecognitionException)
                            {
                                synPredMatched773 = false;
                            }
                            rewind(_m773);
                            inputState.guessing--;
                        }
                        if ( synPredMatched773 )
                        {
                            _saveIndex = text.Length;
                            match('\\');
                            text.Length = _saveIndex;
                            match('$');
                        }
                        else if ((tokenSet_2_.member(cached_LA1)) && ((cached_LA2 >= '\u0003' && cached_LA2 <= '\ufffe')) && ((LA(3) >= '\u0003' && LA(3) <= '\ufffe'))) {
                            {
                                match(tokenSet_2_);
                            }
                        }
                        else if ((cached_LA1=='\n'||cached_LA1=='\r')) {
                            mNEWLINE(false);
                        }
                        else
                        {
                            goto _loop775_breakloop;
                        }
                        }}
                    }
            _loop775_breakloop:					;
                }    // ( ... )*
                _saveIndex = text.Length;
                match("\"\"\"");
                text.Length = _saveIndex;
                if (_createToken && (null == _token) && (_ttype != Token.SKIP))
                {
                    _token = makeToken(_ttype);
                    _token.setText(text.ToString(_begin, text.Length-_begin));
                }
                returnToken_ = _token;
        }