code: final public ParsedExpression parse() throws ParseException {
          Token t = null;
          ParsedExpression pe = new ParsedExpression();
          Term term = null;
          label_1:
          while(true) {
              switch((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
                  case NON_EXPRESSION_TEXT:
                  case START_EXPRESSION:
                  case ESCAPED_START_EXPRESSION:
                      ;
                      break;
                  default:
                      jj_la1[0] = jj_gen;
                      break label_1;
              }
              switch((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
                  case NON_EXPRESSION_TEXT:
                      term = parseLiteralTerm();
                      pe.addTerm(term);
                      break;
                  case START_EXPRESSION:
                      jj_consume_token(START_EXPRESSION);
                      term = parseExpression();
                      jj_consume_token(END_EXPRESSION);
                      pe.addTerm(term);
                      break;
                  case ESCAPED_START_EXPRESSION:
                      jj_consume_token(ESCAPED_START_EXPRESSION);
                      term = parseExpression();
                      jj_consume_token(END_EXPRESSION);
                      pe.addTerm(new LiteralTerm("\\"));
                      pe.addTerm(term);
                      break;
                  default:
                      jj_la1[1] = jj_gen;
                      jj_consume_token(-1);
                      throw new ParseException();
              }
          }
          jj_consume_token(0);
          {
              if(true) return pe;
          }
          throw new Error("Missing return statement in function");
      }
docs: 3.