public final DirkExpParser.literal_return literal() throws RecognitionException {
        DirkExpParser.literal_return retval = new DirkExpParser.literal_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        DirkExpParser.numbericLiteral_return numbericLiteral33 = null;

        DirkExpParser.stringLiteral_return stringLiteral34 = null;



        try {
            // F:\\antlr\\BoncExp.g:67:5: ( numbericLiteral | stringLiteral )
            int alt10=2;
            int LA10_0 = input.LA(1);

            if ( ((LA10_0>=INTEGER_LITERAL && LA10_0<=DATETIME_LITERAL)) ) {
                alt10=1;
            }
            else if ( (LA10_0==STRING_LITERAL||LA10_0==LBRACKET) ) {
                alt10=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 10, 0, input);

                throw nvae;
            }
            switch (alt10) {
                case 1 :
                    // F:\\antlr\\BoncExp.g:67:9: numbericLiteral
                    {
                    root_0 = (CommonTree)adaptor.nil();

                    pushFollow(FOLLOW_numbericLiteral_in_literal559);
                    numbericLiteral33=numbericLiteral();

                    state._fsp--;

                    adaptor.addChild(root_0, numbericLiteral33.getTree());

                    }
                    break;
                case 2 :
                    // F:\\antlr\\BoncExp.g:68:9: stringLiteral
                    {
                    root_0 = (CommonTree)adaptor.nil();

                    pushFollow(FOLLOW_stringLiteral_in_literal569);
                    stringLiteral34=stringLiteral();

                    state._fsp--;

                    adaptor.addChild(root_0, stringLiteral34.getTree());

                    }
                    break;

            }
            retval.stop = input.LT(-1);

            retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }
        finally {
        }
        return retval;
    }