Boo.Lang.Parser.BooParserBase.slicing_expression C# (CSharp) Méthode

slicing_expression() protected méthode

protected slicing_expression ( ) : Expression
Résultat Expression
        protected Expression slicing_expression()
        {
            Expression e;

            IToken  lbrack = null;
            IToken  oft = null;
            IToken  begin = null;
            IToken  lparen = null;

                e = null;
                SlicingExpression se = null;
                MethodInvocationExpression mce = null;
                IToken memberName = null;
                TypeReference genericArgument = null;
                TypeReferenceCollection genericArguments = null;
                Expression nameSplice = null;
                Expression initializer = null;
                UnaryExpression ue = null;

            try {      // for error handling
            e=safe_atom();
            {    // ( ... )*
                for (;;)
                {
                    if ((LA(1)==LBRACK) && (tokenSet_70_.member(LA(2))))
                    {
                        {
                            lbrack = LT(1);
                            match(LBRACK);
                            {
                                switch ( LA(1) )
                                {
                                case OF:
                                {
                                    {
                                        match(OF);
                                        if (0==inputState.guessing)
                                        {

                                                                    GenericReferenceExpression gre = new GenericReferenceExpression(ToLexicalInfo(lbrack));
                                                                    gre.Target = e;
                                                                    e = gre;
                                                                    genericArguments = gre.GenericArguments;

                                        }
                                        type_reference_list(genericArguments);
                                    }
                                    break;
                                }
                                case ESEPARATOR:
                                case CAST:
                                case CHAR:
                                case FALSE:
                                case NOT:
                                case NULL:
                                case SELF:
                                case SUPER:
                                case THEN:
                                case TRUE:
                                case TYPEOF:
                                case TRIPLE_QUOTED_STRING:
                                case LPAREN:
                                case DOUBLE_QUOTED_STRING:
                                case SINGLE_QUOTED_STRING:
                                case ID:
                                case MULTIPLY:
                                case LBRACK:
                                case SPLICE_BEGIN:
                                case DOT:
                                case COLON:
                                case LBRACE:
                                case QQ_BEGIN:
                                case SUBTRACT:
                                case LONG:
                                case INCREMENT:
                                case DECREMENT:
                                case ONES_COMPLEMENT:
                                case INT:
                                case BACKTICK_QUOTED_STRING:
                                case RE_LITERAL:
                                case DOUBLE:
                                case FLOAT:
                                case TIMESPAN:
                                {
                                    if (0==inputState.guessing)
                                    {

                                                            se = new SlicingExpression(ToLexicalInfo(lbrack));
                                                            se.Target = e;
                                                            e = se;

                                    }
                                    slice(se);
                                    {    // ( ... )*
                                        for (;;)
                                        {
                                            if ((LA(1)==COMMA))
                                            {
                                                match(COMMA);
                                                slice(se);
                                            }
                                            else
                                            {
                                                goto _loop589_breakloop;
                                            }

                                        }
            _loop589_breakloop:										;
                                    }    // ( ... )*
                                    break;
                                }
                                default:
                                {
                                    throw new NoViableAltException(LT(1), getFilename());
                                }
                                 }
                            }
                            match(RBRACK);
                            {
                                switch ( LA(1) )
                                {
                                case NULLABLE_SUFFIX:
                                {
                                    match(NULLABLE_SUFFIX);
                                    if (0==inputState.guessing)
                                    {

                                                            ue = new UnaryExpression(e.LexicalInfo);
                                                            ue.Operator = UnaryOperatorType.SafeAccess;
                                                            ue.Operand = e;
                                                            e = ue;

                                    }
                                    break;
                                }
                                case EOF:
                                case DEDENT:
                                case ESEPARATOR:
                                case EOL:
                                case ASSEMBLY_ATTRIBUTE_BEGIN:
                                case MODULE_ATTRIBUTE_BEGIN:
                                case ABSTRACT:
                                case AND:
                                case AS:
                                case BREAK:
                                case CONTINUE:
                                case CALLABLE:
                                case CAST:
                                case CHAR:
                                case CLASS:
                                case DEF:
                                case DO:
                                case ELSE:
                                case ENUM:
                                case EVENT:
                                case FINAL:
                                case FOR:
                                case FALSE:
                                case GOTO:
                                case INTERFACE:
                                case INTERNAL:
                                case IS:
                                case ISA:
                                case IF:
                                case IN:
                                case NEW:
                                case NOT:
                                case NULL:
                                case OF:
                                case OR:
                                case OVERRIDE:
                                case PARTIAL:
                                case PUBLIC:
                                case PROTECTED:
                                case PRIVATE:
                                case RAISE:
                                case RETURN:
                                case SELF:
                                case SUPER:
                                case STATIC:
                                case STRUCT:
                                case THEN:
                                case TRY:
                                case TRANSIENT:
                                case TRUE:
                                case TYPEOF:
                                case UNLESS:
                                case VIRTUAL:
                                case WHILE:
                                case YIELD:
                                case TRIPLE_QUOTED_STRING:
                                case EOS:
                                case LPAREN:
                                case RPAREN:
                                case DOUBLE_QUOTED_STRING:
                                case SINGLE_QUOTED_STRING:
                                case ID:
                                case MULTIPLY:
                                case LBRACK:
                                case RBRACK:
                                case ASSIGN:
                                case COMMA:
                                case SPLICE_BEGIN:
                                case DOT:
                                case COLON:
                                case EXPONENTIATION:
                                case BITWISE_OR:
                                case LBRACE:
                                case RBRACE:
                                case QQ_BEGIN:
                                case QQ_END:
                                case INPLACE_BITWISE_OR:
                                case INPLACE_EXCLUSIVE_OR:
                                case INPLACE_BITWISE_AND:
                                case INPLACE_SHIFT_LEFT:
                                case INPLACE_SHIFT_RIGHT:
                                case CMP_OPERATOR:
                                case GREATER_THAN:
                                case LESS_THAN:
                                case ADD:
                                case SUBTRACT:
                                case EXCLUSIVE_OR:
                                case DIVISION:
                                case MODULUS:
                                case BITWISE_AND:
                                case SHIFT_LEFT:
                                case SHIFT_RIGHT:
                                case LONG:
                                case INCREMENT:
                                case DECREMENT:
                                case ONES_COMPLEMENT:
                                case INT:
                                case BACKTICK_QUOTED_STRING:
                                case RE_LITERAL:
                                case DOUBLE:
                                case FLOAT:
                                case TIMESPAN:
                                {
                                    break;
                                }
                                default:
                                {
                                    throw new NoViableAltException(LT(1), getFilename());
                                }
                                 }
                            }
                        }
                    }
                    else if ((LA(1)==OF)) {
                        {
                            oft = LT(1);
                            match(OF);
                            genericArgument=type_reference();
                            if (0==inputState.guessing)
                            {

                                                GenericReferenceExpression gre = new GenericReferenceExpression(ToLexicalInfo(oft));
                                                gre.Target = e;
                                                e = gre;
                                                gre.GenericArguments.Add(genericArgument);

                            }
                        }
                    }
                    else if ((LA(1)==DOT) && (tokenSet_33_.member(LA(2)))) {
                        {
                            match(DOT);
                            {
                                switch ( LA(1) )
                                {
                                case EVENT:
                                case GET:
                                case INTERNAL:
                                case PUBLIC:
                                case PROTECTED:
                                case REF:
                                case SET:
                                case YIELD:
                                case ID:
                                {
                                    {
                                        memberName=member();
                                        if (0==inputState.guessing)
                                        {

                                                                    e = MemberReferenceForToken(e, memberName);

                                        }
                                    }
                                    break;
                                }
                                case SPLICE_BEGIN:
                                {
                                    {
                                        begin = LT(1);
                                        match(SPLICE_BEGIN);
                                        nameSplice=atom();
                                        if (0==inputState.guessing)
                                        {

                                                                    e = new SpliceMemberReferenceExpression(
                                                                                ToLexicalInfo(begin),
                                                                                e,
                                                                                nameSplice);

                                        }
                                    }
                                    break;
                                }
                                default:
                                {
                                    throw new NoViableAltException(LT(1), getFilename());
                                }
                                 }
                            }
                            {
                                switch ( LA(1) )
                                {
                                case NULLABLE_SUFFIX:
                                {
                                    match(NULLABLE_SUFFIX);
                                    if (0==inputState.guessing)
                                    {

                                                            ue = new UnaryExpression(e.LexicalInfo);
                                                            ue.Operator = UnaryOperatorType.SafeAccess;
                                                            ue.Operand = e;
                                                            e = ue;

                                    }
                                    break;
                                }
                                case EOF:
                                case DEDENT:
                                case ESEPARATOR:
                                case EOL:
                                case ASSEMBLY_ATTRIBUTE_BEGIN:
                                case MODULE_ATTRIBUTE_BEGIN:
                                case ABSTRACT:
                                case AND:
                                case AS:
                                case BREAK:
                                case CONTINUE:
                                case CALLABLE:
                                case CAST:
                                case CHAR:
                                case CLASS:
                                case DEF:
                                case DO:
                                case ELSE:
                                case ENUM:
                                case EVENT:
                                case FINAL:
                                case FOR:
                                case FALSE:
                                case GOTO:
                                case INTERFACE:
                                case INTERNAL:
                                case IS:
                                case ISA:
                                case IF:
                                case IN:
                                case NEW:
                                case NOT:
                                case NULL:
                                case OF:
                                case OR:
                                case OVERRIDE:
                                case PARTIAL:
                                case PUBLIC:
                                case PROTECTED:
                                case PRIVATE:
                                case RAISE:
                                case RETURN:
                                case SELF:
                                case SUPER:
                                case STATIC:
                                case STRUCT:
                                case THEN:
                                case TRY:
                                case TRANSIENT:
                                case TRUE:
                                case TYPEOF:
                                case UNLESS:
                                case VIRTUAL:
                                case WHILE:
                                case YIELD:
                                case TRIPLE_QUOTED_STRING:
                                case EOS:
                                case LPAREN:
                                case RPAREN:
                                case DOUBLE_QUOTED_STRING:
                                case SINGLE_QUOTED_STRING:
                                case ID:
                                case MULTIPLY:
                                case LBRACK:
                                case RBRACK:
                                case ASSIGN:
                                case COMMA:
                                case SPLICE_BEGIN:
                                case DOT:
                                case COLON:
                                case EXPONENTIATION:
                                case BITWISE_OR:
                                case LBRACE:
                                case RBRACE:
                                case QQ_BEGIN:
                                case QQ_END:
                                case INPLACE_BITWISE_OR:
                                case INPLACE_EXCLUSIVE_OR:
                                case INPLACE_BITWISE_AND:
                                case INPLACE_SHIFT_LEFT:
                                case INPLACE_SHIFT_RIGHT:
                                case CMP_OPERATOR:
                                case GREATER_THAN:
                                case LESS_THAN:
                                case ADD:
                                case SUBTRACT:
                                case EXCLUSIVE_OR:
                                case DIVISION:
                                case MODULUS:
                                case BITWISE_AND:
                                case SHIFT_LEFT:
                                case SHIFT_RIGHT:
                                case LONG:
                                case INCREMENT:
                                case DECREMENT:
                                case ONES_COMPLEMENT:
                                case INT:
                                case BACKTICK_QUOTED_STRING:
                                case RE_LITERAL:
                                case DOUBLE:
                                case FLOAT:
                                case TIMESPAN:
                                {
                                    break;
                                }
                                default:
                                {
                                    throw new NoViableAltException(LT(1), getFilename());
                                }
                                 }
                            }
                        }
                    }
                    else if ((LA(1)==LPAREN) && (tokenSet_71_.member(LA(2)))) {
                        {
                            lparen = LT(1);
                            match(LPAREN);
                            if (0==inputState.guessing)
                            {

                                                    mce = new MethodInvocationExpression(ToLexicalInfo(lparen));
                                                    mce.Target = e;
                                                    e = mce;

                            }
                            {
                                switch ( LA(1) )
                                {
                                case ESEPARATOR:
                                case CAST:
                                case CHAR:
                                case FALSE:
                                case NOT:
                                case NULL:
                                case SELF:
                                case SUPER:
                                case THEN:
                                case TRUE:
                                case TYPEOF:
                                case TRIPLE_QUOTED_STRING:
                                case LPAREN:
                                case DOUBLE_QUOTED_STRING:
                                case SINGLE_QUOTED_STRING:
                                case ID:
                                case MULTIPLY:
                                case LBRACK:
                                case SPLICE_BEGIN:
                                case DOT:
                                case LBRACE:
                                case QQ_BEGIN:
                                case SUBTRACT:
                                case LONG:
                                case INCREMENT:
                                case DECREMENT:
                                case ONES_COMPLEMENT:
                                case INT:
                                case BACKTICK_QUOTED_STRING:
                                case RE_LITERAL:
                                case DOUBLE:
                                case FLOAT:
                                case TIMESPAN:
                                {
                                    argument(mce);
                                    {    // ( ... )*
                                        for (;;)
                                        {
                                            if ((LA(1)==COMMA))
                                            {
                                                match(COMMA);
                                                argument(mce);
                                            }
                                            else
                                            {
                                                goto _loop600_breakloop;
                                            }

                                        }
            _loop600_breakloop:										;
                                    }    // ( ... )*
                                    break;
                                }
                                case RPAREN:
                                {
                                    break;
                                }
                                default:
                                {
                                    throw new NoViableAltException(LT(1), getFilename());
                                }
                                 }
                            }
                            match(RPAREN);
                            {
                                switch ( LA(1) )
                                {
                                case NULLABLE_SUFFIX:
                                {
                                    match(NULLABLE_SUFFIX);
                                    if (0==inputState.guessing)
                                    {

                                                            ue = new UnaryExpression(e.LexicalInfo);
                                                            ue.Operator = UnaryOperatorType.SafeAccess;
                                                            ue.Operand = e;
                                                            e = ue;

                                    }
                                    break;
                                }
                                case EOF:
                                case DEDENT:
                                case ESEPARATOR:
                                case EOL:
                                case ASSEMBLY_ATTRIBUTE_BEGIN:
                                case MODULE_ATTRIBUTE_BEGIN:
                                case ABSTRACT:
                                case AND:
                                case AS:
                                case BREAK:
                                case CONTINUE:
                                case CALLABLE:
                                case CAST:
                                case CHAR:
                                case CLASS:
                                case DEF:
                                case DO:
                                case ELSE:
                                case ENUM:
                                case EVENT:
                                case FINAL:
                                case FOR:
                                case FALSE:
                                case GOTO:
                                case INTERFACE:
                                case INTERNAL:
                                case IS:
                                case ISA:
                                case IF:
                                case IN:
                                case NEW:
                                case NOT:
                                case NULL:
                                case OF:
                                case OR:
                                case OVERRIDE:
                                case PARTIAL:
                                case PUBLIC:
                                case PROTECTED:
                                case PRIVATE:
                                case RAISE:
                                case RETURN:
                                case SELF:
                                case SUPER:
                                case STATIC:
                                case STRUCT:
                                case THEN:
                                case TRY:
                                case TRANSIENT:
                                case TRUE:
                                case TYPEOF:
                                case UNLESS:
                                case VIRTUAL:
                                case WHILE:
                                case YIELD:
                                case TRIPLE_QUOTED_STRING:
                                case EOS:
                                case LPAREN:
                                case RPAREN:
                                case DOUBLE_QUOTED_STRING:
                                case SINGLE_QUOTED_STRING:
                                case ID:
                                case MULTIPLY:
                                case LBRACK:
                                case RBRACK:
                                case ASSIGN:
                                case COMMA:
                                case SPLICE_BEGIN:
                                case DOT:
                                case COLON:
                                case EXPONENTIATION:
                                case BITWISE_OR:
                                case LBRACE:
                                case RBRACE:
                                case QQ_BEGIN:
                                case QQ_END:
                                case INPLACE_BITWISE_OR:
                                case INPLACE_EXCLUSIVE_OR:
                                case INPLACE_BITWISE_AND:
                                case INPLACE_SHIFT_LEFT:
                                case INPLACE_SHIFT_RIGHT:
                                case CMP_OPERATOR:
                                case GREATER_THAN:
                                case LESS_THAN:
                                case ADD:
                                case SUBTRACT:
                                case EXCLUSIVE_OR:
                                case DIVISION:
                                case MODULUS:
                                case BITWISE_AND:
                                case SHIFT_LEFT:
                                case SHIFT_RIGHT:
                                case LONG:
                                case INCREMENT:
                                case DECREMENT:
                                case ONES_COMPLEMENT:
                                case INT:
                                case BACKTICK_QUOTED_STRING:
                                case RE_LITERAL:
                                case DOUBLE:
                                case FLOAT:
                                case TIMESPAN:
                                {
                                    break;
                                }
                                default:
                                {
                                    throw new NoViableAltException(LT(1), getFilename());
                                }
                                 }
                            }
                            {
                                if ((LA(1)==LBRACE) && (tokenSet_72_.member(LA(2))))
                                {
                                    {
                                        bool synPredMatched605 = false;
                                        if (((LA(1)==LBRACE) && (tokenSet_72_.member(LA(2)))))
                                        {
                                            int _m605 = mark();
                                            synPredMatched605 = true;
                                            inputState.guessing++;
                                            try {
                                                {
                                                    hash_literal_test();
                                                }
                                            }
                                            catch (RecognitionException)
                                            {
                                                synPredMatched605 = false;
                                            }
                                            rewind(_m605);
                                            inputState.guessing--;
                                        }
                                        if ( synPredMatched605 )
                                        {
                                            initializer=hash_literal();
                                        }
                                        else if ((LA(1)==LBRACE) && (tokenSet_72_.member(LA(2)))) {
                                            initializer=list_initializer();
                                        }
                                        else
                                        {
                                            throw new NoViableAltException(LT(1), getFilename());
                                        }

                                    }
                                    if (0==inputState.guessing)
                                    {
                                        e = new CollectionInitializationExpression(e, initializer);
                                    }
                                }
                                else if ((tokenSet_73_.member(LA(1))) && (tokenSet_15_.member(LA(2)))) {
                                }
                                else
                                {
                                    throw new NoViableAltException(LT(1), getFilename());
                                }

                            }
                        }
                    }
                    else
                    {
                        goto _loop606_breakloop;
                    }

                }
            _loop606_breakloop:				;
            }    // ( ... )*
            }
            catch (RecognitionException ex)
            {
            if (0 == inputState.guessing)
            {
                reportError(ex, "slicing_expression");
                recover(ex,tokenSet_74_);
            }
            else
            {
                throw ex;
            }
            }
            return e;
        }
BooParserBase