예제 #1
0
        override public object Clone()
        {
            CollectionInitializationExpression clone = (CollectionInitializationExpression)FormatterServices.GetUninitializedObject(typeof(CollectionInitializationExpression));

            clone._lexicalInfo       = _lexicalInfo;
            clone._endSourceLocation = _endSourceLocation;
            clone._documentation     = _documentation;
            clone._isSynthetic       = _isSynthetic;
            clone._entity            = _entity;
            if (_annotations != null)
            {
                clone._annotations = (Hashtable)_annotations.Clone();
            }

            clone._expressionType = _expressionType;
            if (null != _collection)
            {
                clone._collection = _collection.Clone() as Expression;
                clone._collection.InitializeParent(clone);
            }
            if (null != _initializer)
            {
                clone._initializer = _initializer.Clone() as Expression;
                clone._initializer.InitializeParent(clone);
            }
            return(clone);
        }
예제 #2
0
		public override void OnCollectionInitializationExpression(CollectionInitializationExpression node)
		{
			var temp = new ReferenceExpression(node.LexicalInfo, Context.GetUniqueName("collection"));

			var initialization = CodeBuilder.CreateEvalInvocation(node.LexicalInfo);

			// temp = $(node.Collection)
			initialization.Arguments.Add(new BinaryExpression(BinaryOperatorType.Assign, temp, node.Collection));

			if (node.Initializer is ListLiteralExpression)
				foreach (var item in ((ListLiteralExpression)node.Initializer).Items)
					// temp.Add(item)
					initialization.Arguments.Add(NewAddInvocation(item.LexicalInfo, temp, item));
			else
				foreach (var pair in ((HashLiteralExpression)node.Initializer).Items)
					// temp.Add(key, value)
					initialization.Arguments.Add(NewAddInvocation(pair.LexicalInfo, temp, pair.First, pair.Second));

			// return temp
			initialization.Arguments.Add(temp.CloneNode());

			ReplaceCurrentNode(initialization);
		}
예제 #3
0
	protected Expression  slicing_expression() //throws RecognitionException, TokenStreamException
{
		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_72_.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 _loop591_breakloop;
											}
											
										}
_loop591_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 CONSTRUCTOR:
								case DEF:
								case DESTRUCTOR:
								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 CONSTRUCTOR:
								case DEF:
								case DESTRUCTOR:
								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_73_.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 _loop602_breakloop;
											}
											
										}
_loop602_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 CONSTRUCTOR:
								case DEF:
								case DESTRUCTOR:
								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_74_.member(LA(2))))
								{
									{
										bool synPredMatched607 = false;
										if (((LA(1)==LBRACE) && (tokenSet_74_.member(LA(2)))))
										{
											int _m607 = mark();
											synPredMatched607 = true;
											inputState.guessing++;
											try {
												{
													hash_literal_test();
												}
											}
											catch (RecognitionException)
											{
												synPredMatched607 = false;
											}
											rewind(_m607);
											inputState.guessing--;
										}
										if ( synPredMatched607 )
										{
											initializer=hash_literal();
										}
										else if ((LA(1)==LBRACE) && (tokenSet_74_.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_75_.member(LA(1))) && (tokenSet_15_.member(LA(2)))) {
								}
								else
								{
									throw new NoViableAltException(LT(1), getFilename());
								}
								
							}
						}
					}
					else
					{
						goto _loop608_breakloop;
					}
					
				}
_loop608_breakloop:				;
			}    // ( ... )*
		}
		catch (RecognitionException ex)
		{
			if (0 == inputState.guessing)
			{
				reportError(ex, "slicing_expression");
				recover(ex,tokenSet_76_);
			}
			else
			{
				throw ex;
			}
		}
		return e;
	}
예제 #4
0
        //throws RecognitionException, TokenStreamException
        protected Expression slicing_expression()
        {
            Expression e;

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

                e = null;
                SlicingExpression se = null;
                MethodInvocationExpression mce = null;
                TypeReference genericArgument = null;
                TypeReferenceCollection genericArguments = null;
                Expression initializer = null;

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

                                                                    GenericReferenceExpression gre = new GenericReferenceExpression(SourceLocationFactory.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 TRUE:
                                case TYPEOF:
                                case ID:
                                case TRIPLE_QUOTED_STRING:
                                case LPAREN:
                                case DOUBLE_QUOTED_STRING:
                                case SINGLE_QUOTED_STRING:
                                case LBRACK:
                                case SUBTRACT:
                                case SPLICE_BEGIN:
                                case DOT:
                                case COLON:
                                case MULTIPLY:
                                case LBRACE:
                                case QQ_BEGIN:
                                case LONG:
                                case INCREMENT:
                                case DECREMENT:
                                case ONES_COMPLEMENT:
                                case INT:
                                case RE_LITERAL:
                                case DOUBLE:
                                case FLOAT:
                                case TIMESPAN:
                                {
                                    if (0==inputState.guessing)
                                    {

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

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

                                        }
            _loop525_breakloop:										;
                                    }    // ( ... )*
                                    break;
                                }
                                default:
                                {
                                    throw new NoViableAltException(LT(1), getFilename());
                                }
                                 }
                            }
                            match(RBRACK);
                        }
                        break;
                    }
                    case OF:
                    {
                        {
                            oft = LT(1);
                            match(OF);
                            genericArgument=type_reference();
                            if (0==inputState.guessing)
                            {

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

                            }
                        }
                        break;
                    }
                    case DOT:
                    {
                        {
                            match(DOT);
                            {    // ( ... )*
                                for (;;)
                                {
                                    if ((LA(1)==NEWLINE))
                                    {
                                        match(NEWLINE);
                                    }
                                    else
                                    {
                                        goto _loop529_breakloop;
                                    }

                                }
            _loop529_breakloop:								;
                            }    // ( ... )*
                            e=member_reference_expression(e);
                        }
                        break;
                    }
                    case LPAREN:
                    {
                        {
                            lparen = LT(1);
                            match(LPAREN);
                            if (0==inputState.guessing)
                            {

                                                    mce = new MethodInvocationExpression(SourceLocationFactory.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 TRUE:
                                case TYPEOF:
                                case ID:
                                case TRIPLE_QUOTED_STRING:
                                case LPAREN:
                                case DOUBLE_QUOTED_STRING:
                                case SINGLE_QUOTED_STRING:
                                case LBRACK:
                                case SUBTRACT:
                                case SPLICE_BEGIN:
                                case DOT:
                                case MULTIPLY:
                                case LBRACE:
                                case QQ_BEGIN:
                                case LONG:
                                case INCREMENT:
                                case DECREMENT:
                                case ONES_COMPLEMENT:
                                case INT:
                                case RE_LITERAL:
                                case DOUBLE:
                                case FLOAT:
                                case TIMESPAN:
                                {
                                    argument(mce);
                                    {    // ( ... )*
                                        for (;;)
                                        {
                                            if ((LA(1)==COMMA))
                                            {
                                                match(COMMA);
                                                argument(mce);
                                            }
                                            else
                                            {
                                                goto _loop533_breakloop;
                                            }

                                        }
            _loop533_breakloop:										;
                                    }    // ( ... )*
                                    break;
                                }
                                case RPAREN:
                                {
                                    break;
                                }
                                default:
                                {
                                    throw new NoViableAltException(LT(1), getFilename());
                                }
                                 }
                            }
                            match(RPAREN);
                            {
                                switch ( LA(1) )
                                {
                                case LBRACE:
                                {
                                    {
                                        bool synPredMatched537 = false;
                                        if (((LA(1)==LBRACE) && (tokenSet_71_.member(LA(2)))))
                                        {
                                            int _m537 = mark();
                                            synPredMatched537 = true;
                                            inputState.guessing++;
                                            try {
                                                {
                                                    hash_literal_test();
                                                }
                                            }
                                            catch (RecognitionException)
                                            {
                                                synPredMatched537 = false;
                                            }
                                            rewind(_m537);
                                            inputState.guessing--;
                                        }
                                        if ( synPredMatched537 )
                                        {
                                            initializer=hash_literal();
                                        }
                                        else if ((LA(1)==LBRACE) && (tokenSet_71_.member(LA(2)))) {
                                            initializer=list_initializer();
                                        }
                                        else
                                        {
                                            throw new NoViableAltException(LT(1), getFilename());
                                        }

                                    }
                                    if (0==inputState.guessing)
                                    {
                                        e = new CollectionInitializationExpression(e, initializer);
                                    }
                                    break;
                                }
                                case EOF:
                                case ESEPARATOR:
                                case AND:
                                case AS:
                                case CAST:
                                case DEF:
                                case DO:
                                case ELSE:
                                case FOR:
                                case IS:
                                case ISA:
                                case IF:
                                case IN:
                                case NOT:
                                case OF:
                                case OR:
                                case UNLESS:
                                case WHILE:
                                case ID:
                                case EOS:
                                case NEWLINE:
                                case LPAREN:
                                case RPAREN:
                                case LBRACK:
                                case RBRACK:
                                case ASSIGN:
                                case SUBTRACT:
                                case COMMA:
                                case DOT:
                                case COLON:
                                case MULTIPLY:
                                case EXPONENTIATION:
                                case BITWISE_OR:
                                case RBRACE:
                                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 EXCLUSIVE_OR:
                                case DIVISION:
                                case MODULUS:
                                case BITWISE_AND:
                                case SHIFT_LEFT:
                                case SHIFT_RIGHT:
                                case INCREMENT:
                                case DECREMENT:
                                {
                                    break;
                                }
                                default:
                                {
                                    throw new NoViableAltException(LT(1), getFilename());
                                }
                                 }
                            }
                        }
                        break;
                    }
                    default:
                    {
                        goto _loop538_breakloop;
                    }
                     }
                }
            _loop538_breakloop:				;
            }    // ( ... )*
            }
            catch (RecognitionException ex)
            {
            if (0 == inputState.guessing)
            {
                reportError(ex);
                recover(ex,tokenSet_72_);
            }
            else
            {
                throw ex;
            }
            }
            return e;
        }
예제 #5
0
        //throws RecognitionException, TokenStreamException
        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;

            try {      // for error handling
            e=atom();
            {    // ( ... )*
                for (;;)
                {
                    if ((LA(1)==LBRACK) && (tokenSet_63_.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 TRUE:
                                case TYPEOF:
                                case ID:
                                case TRIPLE_QUOTED_STRING:
                                case DOUBLE_QUOTED_STRING:
                                case SINGLE_QUOTED_STRING:
                                case LBRACK:
                                case LPAREN:
                                case SPLICE_BEGIN:
                                case DOT:
                                case COLON:
                                case MULTIPLY:
                                case LBRACE:
                                case QQ_BEGIN:
                                case SUBTRACT:
                                case LONG:
                                case INCREMENT:
                                case DECREMENT:
                                case ONES_COMPLEMENT:
                                case INT:
                                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 _loop574_breakloop;
                                            }

                                        }
            _loop574_breakloop:										;
                                    }    // ( ... )*
                                    break;
                                }
                                default:
                                {
                                    throw new NoViableAltException(LT(1), getFilename());
                                }
                                 }
                            }
                            match(RBRACK);
                        }
                    }
                    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_27_.member(LA(2)))) {
                        {
                            match(DOT);
                            {
                                switch ( LA(1) )
                                {
                                case EVENT:
                                case GET:
                                case INTERNAL:
                                case PUBLIC:
                                case PROTECTED:
                                case REF:
                                case SET:
                                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());
                                }
                                 }
                            }
                        }
                    }
                    else if ((LA(1)==LPAREN) && (tokenSet_64_.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 TRUE:
                                case TYPEOF:
                                case ID:
                                case TRIPLE_QUOTED_STRING:
                                case DOUBLE_QUOTED_STRING:
                                case SINGLE_QUOTED_STRING:
                                case LBRACK:
                                case LPAREN:
                                case SPLICE_BEGIN:
                                case DOT:
                                case MULTIPLY:
                                case LBRACE:
                                case QQ_BEGIN:
                                case SUBTRACT:
                                case LONG:
                                case INCREMENT:
                                case DECREMENT:
                                case ONES_COMPLEMENT:
                                case INT:
                                case RE_LITERAL:
                                case DOUBLE:
                                case FLOAT:
                                case TIMESPAN:
                                {
                                    argument(mce);
                                    {    // ( ... )*
                                        for (;;)
                                        {
                                            if ((LA(1)==COMMA))
                                            {
                                                match(COMMA);
                                                argument(mce);
                                            }
                                            else
                                            {
                                                goto _loop583_breakloop;
                                            }

                                        }
            _loop583_breakloop:										;
                                    }    // ( ... )*
                                    break;
                                }
                                case RPAREN:
                                {
                                    break;
                                }
                                default:
                                {
                                    throw new NoViableAltException(LT(1), getFilename());
                                }
                                 }
                            }
                            match(RPAREN);
                            {
                                if ((LA(1)==LBRACE) && (tokenSet_65_.member(LA(2))))
                                {
                                    {
                                        bool synPredMatched587 = false;
                                        if (((LA(1)==LBRACE) && (tokenSet_65_.member(LA(2)))))
                                        {
                                            int _m587 = mark();
                                            synPredMatched587 = true;
                                            inputState.guessing++;
                                            try {
                                                {
                                                    hash_literal_test();
                                                }
                                            }
                                            catch (RecognitionException)
                                            {
                                                synPredMatched587 = false;
                                            }
                                            rewind(_m587);
                                            inputState.guessing--;
                                        }
                                        if ( synPredMatched587 )
                                        {
                                            initializer=hash_literal();
                                        }
                                        else if ((LA(1)==LBRACE) && (tokenSet_65_.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_66_.member(LA(1))) && (tokenSet_14_.member(LA(2)))) {
                                }
                                else
                                {
                                    throw new NoViableAltException(LT(1), getFilename());
                                }

                            }
                        }
                    }
                    else
                    {
                        goto _loop588_breakloop;
                    }

                }
            _loop588_breakloop:				;
            }    // ( ... )*
            }
            catch (RecognitionException ex)
            {
            if (0 == inputState.guessing)
            {
                reportError(ex);
                recover(ex,tokenSet_67_);
            }
            else
            {
                throw ex;
            }
            }
            return e;
        }
		override public object Clone()
		{
		
			CollectionInitializationExpression clone = new CollectionInitializationExpression();
			clone._lexicalInfo = _lexicalInfo;
			clone._endSourceLocation = _endSourceLocation;
			clone._documentation = _documentation;
			clone._isSynthetic = _isSynthetic;
			clone._entity = _entity;
			if (_annotations != null) clone._annotations = (Hashtable)_annotations.Clone();
			clone._expressionType = _expressionType;
			if (null != _collection)
			{
				clone._collection = _collection.Clone() as Expression;
				clone._collection.InitializeParent(clone);
			}
			if (null != _initializer)
			{
				clone._initializer = _initializer.Clone() as Expression;
				clone._initializer.InitializeParent(clone);
			}
			return clone;


		}