public override MdxExpression Process(MdxExpression expr) { if (expr == null) { return(null); } MdxExpression filter = new MdxUnaryExpression ("NOT" , new MdxFunctionExpression ("ISANCESTOR" , new MdxObjectReferenceExpression(args.Member.UniqueName) , new MdxObjectReferenceExpression(args.Member.HierarchyUniqueName + ".CURRENTMEMBER") ) ); var tupleBase = GenTupleBase(); if (tupleBase.Members.Count > 0) { filter = new MdxBinaryExpression (filter , new MdxUnaryExpression ("NOT" , new MdxBinaryExpression (GenTupleBaseCurrent() , GenTupleBase() , "IS" ) ) , "OR" ); } return(new MdxFunctionExpression ("FILTER" , expr , filter )); }
public override MdxExpression Process(MdxExpression expr) { if (expr == null) { return(null); } var tuple = GenTuple(); if (tuple.Members.Count == 1) { return(new MdxFunctionExpression ("DRILLDOWNMEMBER" , expr , tuple )); } expr = new MdxBinaryExpression (expr , new MdxFunctionExpression( "DRILLDOWNMEMBER" , new MdxFunctionExpression ("FILTER" , expr , new MdxBinaryExpression (GenTupleBaseCurrent() , GenTupleBase() , "IS" ) ) , new MdxObjectReferenceExpression(args.Member.UniqueName) ) , "+" ); return(expr); }
public override MdxExpression Process(MdxExpression expr) { if (expr == null) { return(null); } string uniqueName = args.Member.UniqueName; string hierarchyUniqueName = args.Member.HierarchyUniqueName; var drillDownExpr = new MdxFunctionExpression ("Distinct" , new MdxFunctionExpression ("DrillDownMember" , expr , new MdxObjectReferenceExpression(uniqueName) ) ); MdxExpression filter = new MdxFunctionExpression ("IsAncestor" , new MdxObjectReferenceExpression(uniqueName) , new MdxObjectReferenceExpression(hierarchyUniqueName + ".CURRENTMEMBER") ); MdxExpression isSelf = new MdxBinaryExpression (new MdxObjectReferenceExpression(uniqueName) , new MdxObjectReferenceExpression(hierarchyUniqueName + ".CURRENTMEMBER") , "IS" ); if (HideSelf) { isSelf = new MdxBinaryExpression (isSelf , new MdxFunctionExpression ("IsLeaf" , new MdxObjectReferenceExpression(uniqueName) ) , "AND" ); } ; filter = new MdxBinaryExpression (filter , isSelf , "OR" ); if (!SingleDimension) { var tupleBase = GenTupleBase(); if (tupleBase.Members.Count > 0) { filter = new MdxBinaryExpression (filter , new MdxBinaryExpression (GenTupleBaseCurrent() , GenTupleBase() , "IS" ) , "AND" ); } } return(new MdxFunctionExpression("FILTER", drillDownExpr, filter)); }
// $ANTLR end "expression_mult" // $ANTLR start "expression_power" // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:260:1: expression_power returns [MdxExpression value] : f1= expression_unary ( '^' f2= expression_unary )* ; public MdxExpression expression_power() // throws RecognitionException [1] { MdxExpression value = default(MdxExpression); MdxExpression f1 = default(MdxExpression); MdxExpression f2 = default(MdxExpression); try { // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:261:3: (f1= expression_unary ( '^' f2= expression_unary )* ) // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:261:5: f1= expression_unary ( '^' f2= expression_unary )* { PushFollow(FOLLOW_expression_unary_in_expression_power1396); f1 = expression_unary(); state.followingStackPointer--; value = f1; // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:262:4: ( '^' f2= expression_unary )* do { int alt37 = 2; int LA37_0 = input.LA(1); if ( (LA37_0 == 71) ) { alt37 = 1; } switch (alt37) { case 1 : // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:262:6: '^' f2= expression_unary { Match(input,71,FOLLOW_71_in_expression_power1405); PushFollow(FOLLOW_expression_unary_in_expression_power1409); f2 = expression_unary(); state.followingStackPointer--; value = new MdxBinaryExpression(value,f2,"^"); } break; default: goto loop37; } } while (true); loop37: ; // Stops C# compiler whining that label 'loop37' has no statements } } catch (RecognitionException re) { ReportError(re); Recover(input,re); } finally { } return value; }
// $ANTLR end "expression_unary" // $ANTLR start "expression_range_is" // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:273:1: expression_range_is returns [MdxExpression value] : e1= expression_property ( ':' e2= expression_property | IS e3= expression_property )? ; public MdxExpression expression_range_is() // throws RecognitionException [1] { MdxExpression value = default(MdxExpression); MdxExpression e1 = default(MdxExpression); MdxExpression e2 = default(MdxExpression); MdxExpression e3 = default(MdxExpression); try { // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:274:2: (e1= expression_property ( ':' e2= expression_property | IS e3= expression_property )? ) // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:274:4: e1= expression_property ( ':' e2= expression_property | IS e3= expression_property )? { PushFollow(FOLLOW_expression_property_in_expression_range_is1494); e1 = expression_property(); state.followingStackPointer--; value = e1; // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:275:4: ( ':' e2= expression_property | IS e3= expression_property )? int alt39 = 3; int LA39_0 = input.LA(1); if ( (LA39_0 == 72) ) { alt39 = 1; } else if ( (LA39_0 == IS) ) { alt39 = 2; } switch (alt39) { case 1 : // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:275:6: ':' e2= expression_property { Match(input,72,FOLLOW_72_in_expression_range_is1503); PushFollow(FOLLOW_expression_property_in_expression_range_is1507); e2 = expression_property(); state.followingStackPointer--; value = new MdxBinaryExpression(value,e2,":"); } break; case 2 : // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:276:6: IS e3= expression_property { Match(input,IS,FOLLOW_IS_in_expression_range_is1517); PushFollow(FOLLOW_expression_property_in_expression_range_is1521); e3 = expression_property(); state.followingStackPointer--; value = new MdxBinaryExpression(value,e3,"IS"); } break; } } } catch (RecognitionException re) { ReportError(re); Recover(input,re); } finally { } return value; }
// $ANTLR end "expression_add" // $ANTLR start "expression_mult" // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:250:1: expression_mult returns [MdxExpression value] : f1= expression_power ( (op1= '/' | op2= '*' ) f2= expression_power )* ; public MdxExpression expression_mult() // throws RecognitionException [1] { MdxExpression value = default(MdxExpression); IToken op1 = null; IToken op2 = null; MdxExpression f1 = default(MdxExpression); MdxExpression f2 = default(MdxExpression); try { // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:251:3: (f1= expression_power ( (op1= '/' | op2= '*' ) f2= expression_power )* ) // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:251:5: f1= expression_power ( (op1= '/' | op2= '*' ) f2= expression_power )* { PushFollow(FOLLOW_expression_power_in_expression_mult1318); f1 = expression_power(); state.followingStackPointer--; value = f1; string op=""; // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:252:4: ( (op1= '/' | op2= '*' ) f2= expression_power )* do { int alt36 = 2; int LA36_0 = input.LA(1); if ( (LA36_0 == 59 || LA36_0 == 70) ) { alt36 = 1; } switch (alt36) { case 1 : // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:253:6: (op1= '/' | op2= '*' ) f2= expression_power { // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:253:6: (op1= '/' | op2= '*' ) int alt35 = 2; int LA35_0 = input.LA(1); if ( (LA35_0 == 70) ) { alt35 = 1; } else if ( (LA35_0 == 59) ) { alt35 = 2; } else { NoViableAltException nvae_d35s0 = new NoViableAltException("", 35, 0, input); throw nvae_d35s0; } switch (alt35) { case 1 : // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:253:8: op1= '/' { op1=(IToken)Match(input,70,FOLLOW_70_in_expression_mult1337); op=((op1 != null) ? op1.Text : null); } break; case 2 : // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:254:7: op2= '*' { op2=(IToken)Match(input,59,FOLLOW_59_in_expression_mult1349); op=((op2 != null) ? op2.Text : null); } break; } PushFollow(FOLLOW_expression_power_in_expression_mult1366); f2 = expression_power(); state.followingStackPointer--; value = new MdxBinaryExpression(value,f2,op); } break; default: goto loop36; } } while (true); loop36: ; // Stops C# compiler whining that label 'loop36' has no statements } } catch (RecognitionException re) { ReportError(re); Recover(input,re); } finally { } return value; }
// $ANTLR end "expression_compare" // $ANTLR start "expression_add" // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:239:1: expression_add returns [MdxExpression value] : t1= expression_mult ( ( '+' | '-' ) t2= expression_mult )* ; public MdxExpression expression_add() // throws RecognitionException [1] { MdxExpression value = default(MdxExpression); MdxExpression t1 = default(MdxExpression); MdxExpression t2 = default(MdxExpression); try { // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:240:2: (t1= expression_mult ( ( '+' | '-' ) t2= expression_mult )* ) // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:240:4: t1= expression_mult ( ( '+' | '-' ) t2= expression_mult )* { PushFollow(FOLLOW_expression_mult_in_expression_add1253); t1 = expression_mult(); state.followingStackPointer--; value = t1; string op=""; // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:241:3: ( ( '+' | '-' ) t2= expression_mult )* do { int alt34 = 2; int LA34_0 = input.LA(1); if ( ((LA34_0 >= 68 && LA34_0 <= 69)) ) { alt34 = 1; } switch (alt34) { case 1 : // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:242:4: ( '+' | '-' ) t2= expression_mult { // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:242:4: ( '+' | '-' ) int alt33 = 2; int LA33_0 = input.LA(1); if ( (LA33_0 == 68) ) { alt33 = 1; } else if ( (LA33_0 == 69) ) { alt33 = 2; } else { NoViableAltException nvae_d33s0 = new NoViableAltException("", 33, 0, input); throw nvae_d33s0; } switch (alt33) { case 1 : // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:242:6: '+' { Match(input,68,FOLLOW_68_in_expression_add1266); op="+"; } break; case 2 : // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:243:6: '-' { Match(input,69,FOLLOW_69_in_expression_add1275); op="-"; } break; } PushFollow(FOLLOW_expression_mult_in_expression_add1286); t2 = expression_mult(); state.followingStackPointer--; value = new MdxBinaryExpression(value,t2,op); } break; default: goto loop34; } } while (true); loop34: ; // Stops C# compiler whining that label 'loop34' has no statements } } catch (RecognitionException re) { ReportError(re); Recover(input,re); } finally { } return value; }
// $ANTLR end "expression_and" // $ANTLR start "expression_compare" // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:226:1: expression_compare returns [MdxExpression value] : t1= expression_add ( ( '=' | '<>' | '<' | '>' | '<=' | '>=' ) t2= expression_add )* ; public MdxExpression expression_compare() // throws RecognitionException [1] { MdxExpression value = default(MdxExpression); MdxExpression t1 = default(MdxExpression); MdxExpression t2 = default(MdxExpression); try { // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:227:2: (t1= expression_add ( ( '=' | '<>' | '<' | '>' | '<=' | '>=' ) t2= expression_add )* ) // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:227:4: t1= expression_add ( ( '=' | '<>' | '<' | '>' | '<=' | '>=' ) t2= expression_add )* { PushFollow(FOLLOW_expression_add_in_expression_compare1154); t1 = expression_add(); state.followingStackPointer--; value = t1; string op=""; // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:228:3: ( ( '=' | '<>' | '<' | '>' | '<=' | '>=' ) t2= expression_add )* do { int alt32 = 2; int LA32_0 = input.LA(1); if ( (LA32_0 == 53 || (LA32_0 >= 63 && LA32_0 <= 67)) ) { alt32 = 1; } switch (alt32) { case 1 : // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:229:4: ( '=' | '<>' | '<' | '>' | '<=' | '>=' ) t2= expression_add { // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:229:4: ( '=' | '<>' | '<' | '>' | '<=' | '>=' ) int alt31 = 6; switch ( input.LA(1) ) { case 53: { alt31 = 1; } break; case 63: { alt31 = 2; } break; case 64: { alt31 = 3; } break; case 65: { alt31 = 4; } break; case 66: { alt31 = 5; } break; case 67: { alt31 = 6; } break; default: NoViableAltException nvae_d31s0 = new NoViableAltException("", 31, 0, input); throw nvae_d31s0; } switch (alt31) { case 1 : // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:229:6: '=' { Match(input,53,FOLLOW_53_in_expression_compare1167); op="="; } break; case 2 : // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:230:6: '<>' { Match(input,63,FOLLOW_63_in_expression_compare1176); op="<>"; } break; case 3 : // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:231:6: '<' { Match(input,64,FOLLOW_64_in_expression_compare1185); op="<"; } break; case 4 : // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:232:6: '>' { Match(input,65,FOLLOW_65_in_expression_compare1194); op=">"; } break; case 5 : // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:233:6: '<=' { Match(input,66,FOLLOW_66_in_expression_compare1203); op="<="; } break; case 6 : // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:234:6: '>=' { Match(input,67,FOLLOW_67_in_expression_compare1212); op=">="; } break; } PushFollow(FOLLOW_expression_add_in_expression_compare1223); t2 = expression_add(); state.followingStackPointer--; value = new MdxBinaryExpression(value,t2,op); } break; default: goto loop32; } } while (true); loop32: ; // Stops C# compiler whining that label 'loop32' has no statements } } catch (RecognitionException re) { ReportError(re); Recover(input,re); } finally { } return value; }
// $ANTLR end "expression_or_xor" // $ANTLR start "expression_and" // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:221:1: expression_and returns [MdxExpression value] : t1= expression_compare ( AND t2= expression_compare )* ; public MdxExpression expression_and() // throws RecognitionException [1] { MdxExpression value = default(MdxExpression); MdxExpression t1 = default(MdxExpression); MdxExpression t2 = default(MdxExpression); try { // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:222:2: (t1= expression_compare ( AND t2= expression_compare )* ) // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:222:4: t1= expression_compare ( AND t2= expression_compare )* { PushFollow(FOLLOW_expression_compare_in_expression_and1118); t1 = expression_compare(); state.followingStackPointer--; value = t1; // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:223:3: ( AND t2= expression_compare )* do { int alt30 = 2; int LA30_0 = input.LA(1); if ( (LA30_0 == AND) ) { alt30 = 1; } switch (alt30) { case 1 : // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:223:5: AND t2= expression_compare { Match(input,AND,FOLLOW_AND_in_expression_and1127); PushFollow(FOLLOW_expression_compare_in_expression_and1131); t2 = expression_compare(); state.followingStackPointer--; value = new MdxBinaryExpression(value,t2,"AND"); } break; default: goto loop30; } } while (true); loop30: ; // Stops C# compiler whining that label 'loop30' has no statements } } catch (RecognitionException re) { ReportError(re); Recover(input,re); } finally { } return value; }
// $ANTLR end "expression" // $ANTLR start "expression_or_xor" // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:212:1: expression_or_xor returns [MdxExpression value] : t1= expression_and ( ( XOR | OR ) t2= expression_and )* ; public MdxExpression expression_or_xor() // throws RecognitionException [1] { MdxExpression value = default(MdxExpression); MdxExpression t1 = default(MdxExpression); MdxExpression t2 = default(MdxExpression); try { // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:213:2: (t1= expression_and ( ( XOR | OR ) t2= expression_and )* ) // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:213:4: t1= expression_and ( ( XOR | OR ) t2= expression_and )* { PushFollow(FOLLOW_expression_and_in_expression_or_xor1052); t1 = expression_and(); state.followingStackPointer--; value = t1; string op=""; // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:214:3: ( ( XOR | OR ) t2= expression_and )* do { int alt29 = 2; int LA29_0 = input.LA(1); if ( ((LA29_0 >= XOR && LA29_0 <= OR)) ) { alt29 = 1; } switch (alt29) { case 1 : // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:215:5: ( XOR | OR ) t2= expression_and { // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:215:5: ( XOR | OR ) int alt28 = 2; int LA28_0 = input.LA(1); if ( (LA28_0 == XOR) ) { alt28 = 1; } else if ( (LA28_0 == OR) ) { alt28 = 2; } else { NoViableAltException nvae_d28s0 = new NoViableAltException("", 28, 0, input); throw nvae_d28s0; } switch (alt28) { case 1 : // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:215:7: XOR { Match(input,XOR,FOLLOW_XOR_in_expression_or_xor1066); op="XOR"; } break; case 2 : // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:216:7: OR { Match(input,OR,FOLLOW_OR_in_expression_or_xor1076); op="OR"; } break; } PushFollow(FOLLOW_expression_and_in_expression_or_xor1088); t2 = expression_and(); state.followingStackPointer--; value = new MdxBinaryExpression(value,t2,op); } break; default: goto loop29; } } while (true); loop29: ; // Stops C# compiler whining that label 'loop29' has no statements } } catch (RecognitionException re) { ReportError(re); Recover(input,re); } finally { } return value; }