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


        Object root_0 = null;

        GramaticaAst.int_literal_return int_literal124 =null;

        GramaticaAst.char_literal_return char_literal125 =null;

        GramaticaAst.bool_literal_return bool_literal126 =null;



        try {
            // compiler/ast/GramaticaAst.g:127:11: ( int_literal | char_literal | bool_literal )
            int alt33=3;
            switch ( input.LA(1) ) {
            case DIGIT:
            case HEX:
                {
                alt33=1;
                }
                break;
            case CHR:
                {
                alt33=2;
                }
                break;
            case FALSE:
            case TRUE:
                {
                alt33=3;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("", 33, 0, input);

                throw nvae;

            }

            switch (alt33) {
                case 1 :
                    // compiler/ast/GramaticaAst.g:127:13: int_literal
                    {
                    root_0 = (Object)adaptor.nil();


                    pushFollow(FOLLOW_int_literal_in_literal1273);
                    int_literal124=int_literal();

                    state._fsp--;

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

                    }
                    break;
                case 2 :
                    // compiler/ast/GramaticaAst.g:127:27: char_literal
                    {
                    root_0 = (Object)adaptor.nil();


                    pushFollow(FOLLOW_char_literal_in_literal1277);
                    char_literal125=char_literal();

                    state._fsp--;

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

                    }
                    break;
                case 3 :
                    // compiler/ast/GramaticaAst.g:127:42: bool_literal
                    {
                    root_0 = (Object)adaptor.nil();


                    pushFollow(FOLLOW_bool_literal_in_literal1281);
                    bool_literal126=bool_literal();

                    state._fsp--;

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

                    }
                    break;

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


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

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

        }

        finally {
        	// do for sure before leaving
        }
        return retval;
    }