/* Production 39 chapter 3.4 corba 2.3.1 */
  public void literal() {
 /*@bgen(jjtree) literal */
  ASTliteral jjtn000 = new ASTliteral(this, IDLParserTreeConstants.JJTLITERAL);
  bool jjtc000 = true;
  jjtree.openNodeScope(jjtn000);Object litVal;
    try {
      if (jj_2_12(2)) {
        litVal = integer_literal();
                               jjtree.closeNodeScope(jjtn000, true);
                               jjtc000 = false;
                               jjtn000.setLitVal(new IntegerLiteral((Decimal)litVal));
      } else {
        switch ((jj_ntk==-1)?jj_ntk_calc():jj_ntk) {
        case IDLParserConstants.STRING:
          litVal = string_literal();
                              jjtree.closeNodeScope(jjtn000, true);
                              jjtc000 = false;
                              jjtn000.setLitVal(new StringLiteral((String)litVal, false));
          break;
        default:
          jj_la1[46] = jj_gen;
          if (jj_2_13(2)) {
            litVal = wide_string_literal();
                                   jjtree.closeNodeScope(jjtn000, true);
                                   jjtc000 = false;
                                   jjtn000.setLitVal(new StringLiteral((String)litVal, true));
          } else {
            switch ((jj_ntk==-1)?jj_ntk_calc():jj_ntk) {
            case IDLParserConstants.CHARACTER:
              litVal = character_literal();
                                 jjtree.closeNodeScope(jjtn000, true);
                                 jjtc000 = false;
                                 jjtn000.setLitVal(new CharLiteral((Char)litVal, false));
              break;
            default:
              jj_la1[47] = jj_gen;
              if (jj_2_14(2)) {
                litVal = wide_character_literal();
                                      jjtree.closeNodeScope(jjtn000, true);
                                      jjtc000 = false;
                                      jjtn000.setLitVal(new CharLiteral((Char)litVal, true));
              } else if (jj_2_15(2)) {
                litVal = fixed_pt_literal();
                                jjtree.closeNodeScope(jjtn000, true);
                                jjtc000 = false;
                                {if (true) throw new NotSupportedException("fixed point literal not yet supported");}
              } else if (jj_2_16(2)) {
                litVal = floating_pt_literal();
                                   jjtree.closeNodeScope(jjtn000, true);
                                   jjtc000 = false;
                                   jjtn000.setLitVal(new FloatLiteral((Double)litVal));
              } else {
                switch ((jj_ntk==-1)?jj_ntk_calc():jj_ntk) {
                case 46:
                case 47:
                  litVal = boolean_literal();
                               jjtree.closeNodeScope(jjtn000, true);
                               jjtc000 = false;
                               jjtn000.setLitVal(new BooleanLiteral((Boolean)litVal));
                  break;
                default:
                  jj_la1[48] = jj_gen;
                  jj_consume_token(-1);
                  throw new ParseException();
                  break;
                }
              }
              break;
            }
          }
          break;
        }
      }
    } catch (Exception jjte000) {
  if (jjtc000) {
    jjtree.clearNodeScope(jjtn000);
    jjtc000 = false;
  } else {
    jjtree.popNode();
  }
{if (true) throw ;}
    } finally {
  if (jjtc000) {
    jjtree.closeNodeScope(jjtn000, true);
  }
    }
  }
 /**
  * @see parser.IDLParserVisitor#visit(ASTliteral, Object)
  */
 public Object visit(ASTliteral node, Object data) {
     return node.getLitVal();
 }