Token COLON9=null;
Token UNIFY10=null;
BaseDescr left = null;
boolean isLeft = false; BindingDescr bind = null;
try {
// src/main/resources/org/drools/lang/DRLExpressions.g:488:5: ( TILDE unaryExpression | NEGATION unaryExpression | ( castExpression )=> castExpression | ( ({...}? (var= ID COLON ) ) | ({...}? (var= ID UNIFY ) ) )? left= primary ( ( selector )=> selector )* ( ( INCR | DECR )=> ( INCR | DECR ) )? )
int alt53=4;
alt53 = dfa53.predict(input);
switch (alt53) {
case 1 :
// src/main/resources/org/drools/lang/DRLExpressions.g:488:9: TILDE unaryExpression
{
match(input,TILDE,FOLLOW_TILDE_in_unaryExpressionNotPlusMinus2362); if (state.failed) return retval;
pushFollow(FOLLOW_unaryExpression_in_unaryExpressionNotPlusMinus2364);
unaryExpression();
state._fsp--;
if (state.failed) return retval;
}
break;
case 2 :
// src/main/resources/org/drools/lang/DRLExpressions.g:489:8: NEGATION unaryExpression
{
match(input,NEGATION,FOLLOW_NEGATION_in_unaryExpressionNotPlusMinus2373); if (state.failed) return retval;
pushFollow(FOLLOW_unaryExpression_in_unaryExpressionNotPlusMinus2375);
unaryExpression();
state._fsp--;
if (state.failed) return retval;
}
break;
case 3 :
// src/main/resources/org/drools/lang/DRLExpressions.g:490:9: ( castExpression )=> castExpression
{
pushFollow(FOLLOW_castExpression_in_unaryExpressionNotPlusMinus2389);
castExpression();
state._fsp--;
if (state.failed) return retval;
}
break;
case 4 :
// src/main/resources/org/drools/lang/DRLExpressions.g:491:9: ( ({...}? (var= ID COLON ) ) | ({...}? (var= ID UNIFY ) ) )? left= primary ( ( selector )=> selector )* ( ( INCR | DECR )=> ( INCR | DECR ) )?
{
if ( state.backtracking==0 ) {
isLeft = helper.getLeftMostExpr() == null;
}
// src/main/resources/org/drools/lang/DRLExpressions.g:492:9: ( ({...}? (var= ID COLON ) ) | ({...}? (var= ID UNIFY ) ) )?
int alt50=3;
int LA50_0 = input.LA(1);
if ( (LA50_0==ID) ) {
int LA50_1 = input.LA(2);
if ( (LA50_1==COLON) ) {
int LA50_3 = input.LA(3);
if ( ((inMap == 0 && ternOp == 0 && input.LA(2) == DRLLexer.COLON)) ) {
alt50=1;
}
}
else if ( (LA50_1==UNIFY) ) {
alt50=2;
}
}
switch (alt50) {
case 1 :
// src/main/resources/org/drools/lang/DRLExpressions.g:492:11: ({...}? (var= ID COLON ) )
{
// src/main/resources/org/drools/lang/DRLExpressions.g:492:11: ({...}? (var= ID COLON ) )
// src/main/resources/org/drools/lang/DRLExpressions.g:492:12: {...}? (var= ID COLON )
{
if ( !((inMap == 0 && ternOp == 0 && input.LA(2) == DRLLexer.COLON)) ) {
if (state.backtracking>0) {state.failed=true; return retval;}
throw new FailedPredicateException(input, "unaryExpressionNotPlusMinus", "inMap == 0 && ternOp == 0 && input.LA(2) == DRLLexer.COLON");
}
// src/main/resources/org/drools/lang/DRLExpressions.g:492:74: (var= ID COLON )
// src/main/resources/org/drools/lang/DRLExpressions.g:492:75: var= ID COLON
{
var=(Token)match(input,ID,FOLLOW_ID_in_unaryExpressionNotPlusMinus2417); if (state.failed) return retval;
COLON9=(Token)match(input,COLON,FOLLOW_COLON_in_unaryExpressionNotPlusMinus2419); if (state.failed) return retval;
if ( state.backtracking==0 ) {
hasBindings = true; helper.emit(var, DroolsEditorType.IDENTIFIER_VARIABLE); helper.emit(COLON9, DroolsEditorType.SYMBOL); if( buildDescr ) { bind = new BindingDescr((var!=null?var.getText():null), null, false); helper.setStart( bind, var ); }
}
}
}
}
break;
case 2 :
// src/main/resources/org/drools/lang/DRLExpressions.g:494:11: ({...}? (var= ID UNIFY ) )
{
// src/main/resources/org/drools/lang/DRLExpressions.g:494:11: ({...}? (var= ID UNIFY ) )
// src/main/resources/org/drools/lang/DRLExpressions.g:494:12: {...}? (var= ID UNIFY )
{
if ( !((inMap == 0 && ternOp == 0 && input.LA(2) == DRLLexer.UNIFY)) ) {
if (state.backtracking>0) {state.failed=true; return retval;}
throw new FailedPredicateException(input, "unaryExpressionNotPlusMinus", "inMap == 0 && ternOp == 0 && input.LA(2) == DRLLexer.UNIFY");
}
// src/main/resources/org/drools/lang/DRLExpressions.g:494:74: (var= ID UNIFY )
// src/main/resources/org/drools/lang/DRLExpressions.g:494:75: var= ID UNIFY
{
var=(Token)match(input,ID,FOLLOW_ID_in_unaryExpressionNotPlusMinus2458); if (state.failed) return retval;
UNIFY10=(Token)match(input,UNIFY,FOLLOW_UNIFY_in_unaryExpressionNotPlusMinus2460); if (state.failed) return retval;
if ( state.backtracking==0 ) {
hasBindings = true; helper.emit(var, DroolsEditorType.IDENTIFIER_VARIABLE); helper.emit(UNIFY10, DroolsEditorType.SYMBOL); if( buildDescr ) { bind = new BindingDescr((var!=null?var.getText():null), null, true); helper.setStart( bind, var ); }
}
}
}
}
break;
}
pushFollow(FOLLOW_primary_in_unaryExpressionNotPlusMinus2505);
left=primary();
state._fsp--;
if (state.failed) return retval;
if ( state.backtracking==0 ) {
if( buildDescr ) { retval.result = left; }
}
// src/main/resources/org/drools/lang/DRLExpressions.g:498:9: ( ( selector )=> selector )*
loop51:
do {
int alt51=2;
int LA51_0 = input.LA(1);
if ( (LA51_0==DOT) && (synpred15_DRLExpressions())) {
alt51=1;
}
else if ( (LA51_0==LEFT_SQUARE) && (synpred15_DRLExpressions())) {
alt51=1;
}
switch (alt51) {
case 1 :
// src/main/resources/org/drools/lang/DRLExpressions.g:498:10: ( selector )=> selector
{
pushFollow(FOLLOW_selector_in_unaryExpressionNotPlusMinus2522);
selector();
state._fsp--;
if (state.failed) return retval;
}
break;
default :
break loop51;
}
} while (true);
if ( state.backtracking==0 ) {
if( buildDescr ) {
String expr = input.toString(retval.start,input.LT(-1));
if( isLeft ) {
helper.setLeftMostExpr( expr );
}
if( bind != null ) {
if( bind.isUnification() ) {
expr = expr.substring( expr.indexOf( ":=" ) + 2 ).trim();
} else {
expr = expr.substring( expr.indexOf( ":" ) + 1 ).trim();
}
bind.setExpressionAndBindingField( expr );
helper.setEnd( bind );
retval.result = bind;
}
}