Token COLON9=null;
Token UNIFY10=null;
BaseDescr left = null;
boolean isLeft = false; BindingDescr bind = null;
try {
// src/main/resources/org/drools/lang/DRLExpressions.g:421:5: ( TILDE unaryExpression | NEGATION unaryExpression | ( castExpression )=> castExpression | ( ({...}? (var= ID COLON ) ) | ({...}? (var= ID UNIFY ) ) )? left= primary ( ( selector )=> selector )* ( ( INCR | DECR )=> ( INCR | DECR ) )? )
int alt43=4;
alt43 = dfa43.predict(input);
switch (alt43) {
case 1 :
// src/main/resources/org/drools/lang/DRLExpressions.g:421:9: TILDE unaryExpression
{
match(input,TILDE,FOLLOW_TILDE_in_unaryExpressionNotPlusMinus2132); if (state.failed) return retval;
pushFollow(FOLLOW_unaryExpression_in_unaryExpressionNotPlusMinus2134);
unaryExpression();
state._fsp--;
if (state.failed) return retval;
}
break;
case 2 :
// src/main/resources/org/drools/lang/DRLExpressions.g:422:8: NEGATION unaryExpression
{
match(input,NEGATION,FOLLOW_NEGATION_in_unaryExpressionNotPlusMinus2143); if (state.failed) return retval;
pushFollow(FOLLOW_unaryExpression_in_unaryExpressionNotPlusMinus2145);
unaryExpression();
state._fsp--;
if (state.failed) return retval;
}
break;
case 3 :
// src/main/resources/org/drools/lang/DRLExpressions.g:423:9: ( castExpression )=> castExpression
{
pushFollow(FOLLOW_castExpression_in_unaryExpressionNotPlusMinus2159);
castExpression();
state._fsp--;
if (state.failed) return retval;
}
break;
case 4 :
// src/main/resources/org/drools/lang/DRLExpressions.g:424: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:425:9: ( ({...}? (var= ID COLON ) ) | ({...}? (var= ID UNIFY ) ) )?
int alt40=3;
int LA40_0 = input.LA(1);
if ( (LA40_0==ID) ) {
int LA40_1 = input.LA(2);
if ( (LA40_1==COLON) ) {
int LA40_3 = input.LA(3);
if ( ((inMap == 0 && ternOp == 0 && input.LA(2) == DRLLexer.COLON)) ) {
alt40=1;
}
}
else if ( (LA40_1==UNIFY) ) {
alt40=2;
}
}
switch (alt40) {
case 1 :
// src/main/resources/org/drools/lang/DRLExpressions.g:425:11: ({...}? (var= ID COLON ) )
{
// src/main/resources/org/drools/lang/DRLExpressions.g:425:11: ({...}? (var= ID COLON ) )
// src/main/resources/org/drools/lang/DRLExpressions.g:425: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:425:74: (var= ID COLON )
// src/main/resources/org/drools/lang/DRLExpressions.g:425:75: var= ID COLON
{
var=(Token)match(input,ID,FOLLOW_ID_in_unaryExpressionNotPlusMinus2187); if (state.failed) return retval;
COLON9=(Token)match(input,COLON,FOLLOW_COLON_in_unaryExpressionNotPlusMinus2189); 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:427:11: ({...}? (var= ID UNIFY ) )
{
// src/main/resources/org/drools/lang/DRLExpressions.g:427:11: ({...}? (var= ID UNIFY ) )
// src/main/resources/org/drools/lang/DRLExpressions.g:427: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:427:74: (var= ID UNIFY )
// src/main/resources/org/drools/lang/DRLExpressions.g:427:75: var= ID UNIFY
{
var=(Token)match(input,ID,FOLLOW_ID_in_unaryExpressionNotPlusMinus2228); if (state.failed) return retval;
UNIFY10=(Token)match(input,UNIFY,FOLLOW_UNIFY_in_unaryExpressionNotPlusMinus2230); 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_unaryExpressionNotPlusMinus2275);
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:431:9: ( ( selector )=> selector )*
loop41:
do {
int alt41=2;
int LA41_0 = input.LA(1);
if ( (LA41_0==DOT) && (synpred16_DRLExpressions())) {
alt41=1;
}
else if ( (LA41_0==LEFT_SQUARE) && (synpred16_DRLExpressions())) {
alt41=1;
}
switch (alt41) {
case 1 :
// src/main/resources/org/drools/lang/DRLExpressions.g:431:10: ( selector )=> selector
{
pushFollow(FOLLOW_selector_in_unaryExpressionNotPlusMinus2292);
selector();
state._fsp--;
if (state.failed) return retval;
}
break;
default :
break loop41;
}
} 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.setExpression( expr );
helper.setEnd( bind );
retval.result = bind;
}
}