private void lhsPattern( PatternDescrBuilder< ? > pattern,
                             String label,
                             boolean isUnification ) throws RecognitionException {
        boolean query = false;
        if ( input.LA( 1 ) == DRL5Lexer.QUESTION ) {
            match( input,
                   DRL5Lexer.QUESTION,
                   null,
                   null,
                   DroolsEditorType.SYMBOL );
            if ( state.failed ) return;
            query = true;
        }

        String type = this.qualifiedIdentifier();
        if ( state.failed ) return;

        if ( state.backtracking == 0 ) {
            pattern.type( type );
            pattern.isQuery( query );
            if ( label != null ) {
                pattern.id( label,
                            isUnification );
            }
        }

        match( input,
               DRL5Lexer.LEFT_PAREN,
               null,
               null,
               DroolsEditorType.SYMBOL );
        if ( state.failed ) return;

        if ( input.LA( 1 ) != DRL5Lexer.RIGHT_PAREN && speculatePositionalConstraints() ) {
            positionalConstraints( pattern );
        }

        if ( input.LA( 1 ) != DRL5Lexer.RIGHT_PAREN ) {
            constraints( pattern );
        }

        match( input,
               DRL5Lexer.RIGHT_PAREN,
               null,
               null,
               DroolsEditorType.SYMBOL );
        if ( state.failed ) return;

        while ( input.LA( 1 ) == DRL5Lexer.AT ) {
            // annotation*
            annotation( pattern );
            if ( state.failed ) return;
        }

        if ( helper.validateIdentifierKey( DroolsSoftKeywords.OVER ) ) {
            //           || input.LA( 1 ) == DRL5Lexer.PIPE ) {
            patternFilter( pattern );
        }

        if ( helper.validateIdentifierKey( DroolsSoftKeywords.FROM ) ) {
            patternSource( pattern );
        }

        if ( state.backtracking == 0 ) {
            helper.emit( Location.LOCATION_LHS_BEGIN_OF_CONDITION );
        }
    }
private void lhsPattern ( PatternDescrBuilder < ? > pattern , String label , boolean isUnification ) throws RecognitionException { boolean query = false ; if ( input . LA ( 1 ) == DRL5Lexer . QUESTION ) { match ( input , DRL5Lexer . QUESTION , null , null , DroolsEditorType . SYMBOL ) ; if ( state . failed ) return ; query = true ; } String type = this . qualifiedIdentifier ( ) ; if ( state . failed ) return ; if ( state . backtracking == 0 ) { pattern . type ( type ) ; pattern . isQuery ( query ) ; if ( label != null ) { pattern . id ( label , isUnification ) ; } } match ( input , DRL5Lexer . LEFT_PAREN , null , null , DroolsEditorType . SYMBOL ) ; if ( state . failed ) return ; if ( input . LA ( 1 ) != DRL5Lexer . RIGHT_PAREN && speculatePositionalConstraints ( ) ) { positionalConstraints ( pattern ) ; } if ( input . LA ( 1 ) != DRL5Lexer . RIGHT_PAREN ) { constraints ( pattern ) ; } match ( input , DRL5Lexer . RIGHT_PAREN , null , null , DroolsEditorType . SYMBOL ) ; if ( state . failed ) return ; while ( input . LA ( 1 ) == DRL5Lexer . AT ) { annotation ( pattern ) ; if ( state . failed ) return ; } if ( helper . validateIdentifierKey ( DroolsSoftKeywords . OVER ) ) { patternFilter ( pattern ) ; } if ( helper . validateIdentifierKey ( DroolsSoftKeywords . FROM ) ) { patternSource ( pattern ) ; } if ( state . backtracking == 0 ) { helper . emit ( Location . LOCATION_LHS_BEGIN_OF_CONDITION ) ; } }
lhsPattern := QUESTION? qualifiedIdentifier
LEFT_PAREN positionalConstraints? constraints? RIGHT_PAREN
(OVER patternFilter)? (FROM patternSource)?

@param pattern
@param label
@param isUnification
@throws RecognitionException