Program: 12129
Project: 12129
Buggy source:
static boolean epmem_parse_chunk(SymbolFactoryImpl symbols,Lexer lexer,Map<String,IdentifierImpl> ids,Set<WmeImpl> wmes) throws IOException {
  boolean return_val=false;
  boolean good_at=false;
  lexer.getNextLexeme();
  if ((lexer.getCurrentLexeme().type == LexemeType.AT) || (lexer.getCurrentLexeme().type == LexemeType.IDENTIFIER) || (lexer.getCurrentLexeme().type == LexemeType.VARIABLE)) {
    good_at=true;
    if (lexer.getCurrentLexeme().type == LexemeType.AT) {
      lexer.getNextLexeme();
      good_at=(lexer.getCurrentLexeme().type == LexemeType.IDENTIFIER);
    }
    if (good_at) {
      Lexeme lexeme=lexer.getCurrentLexeme();
      String idKey;
      IdentifierImpl id;
      if (lexer.getCurrentLexeme().type == LexemeType.IDENTIFIER) {
        id=symbols.findOrCreateIdentifier(lexeme.id_letter,lexeme.id_number);
        idKey=String.format("String_Node_Str",lexeme.id_letter,lexeme.id_number);
      }
 else {
        id=ids.get(lexeme.string);
        if (id == null)         id=symbols.createIdentifier('X');
        idKey=lexeme.string;
      }
      ids.put(idKey,id);
      lexer.getNextLexeme();
      IdentifierImpl intermediate_parent;
      while (lexer.getCurrentLexeme().type == LexemeType.UP_ARROW) {
        intermediate_parent=id;
        lexer.getNextLexeme();
        SymbolImpl chunk_attr=epmem_parse_constant_attr(symbols,lexer.getCurrentLexeme());
        if (chunk_attr != null) {
          lexer.getNextLexeme();
          while (lexer.getCurrentLexeme().type == LexemeType.PERIOD) {
            IdentifierImpl temp_id=symbols.createIdentifier(chunk_attr.getFirstLetter());
            WmeImpl newWme=new WmeImpl(intermediate_parent,chunk_attr,temp_id,false,0);
            wmes.add(newWme);
            intermediate_parent=temp_id;
            lexer.getNextLexeme();
            chunk_attr=epmem_parse_constant_attr(symbols,lexer.getCurrentLexeme());
            lexer.getNextLexeme();
          }
          if (chunk_attr != null) {
            Object chunk_value=null;
            do {
              chunk_value=null;
              if (lexer.getCurrentLexeme().type == LexemeType.SYM_CONSTANT) {
                chunk_value=symbols.createString(lexer.getCurrentLexeme().string);
              }
 else               if (lexer.getCurrentLexeme().type == LexemeType.INTEGER) {
                chunk_value=symbols.createInteger(lexer.getCurrentLexeme().int_val);
              }
 else               if (lexer.getCurrentLexeme().type == LexemeType.FLOAT) {
                chunk_value=symbols.createDouble(lexer.getCurrentLexeme().float_val);
              }
 else               if ((lexer.getCurrentLexeme().type == LexemeType.AT) || (lexer.getCurrentLexeme().type == LexemeType.IDENTIFIER) || (lexer.getCurrentLexeme().type == LexemeType.VARIABLE)) {
                good_at=true;
                if (lexer.getCurrentLexeme().type == LexemeType.AT) {
                  lexer.getNextLexeme();
                  good_at=(lexer.getCurrentLexeme().type == LexemeType.IDENTIFIER);
                }
                if (good_at) {
                  lexeme=lexer.getCurrentLexeme();
                  if (lexer.getCurrentLexeme().type == LexemeType.IDENTIFIER) {
                    id=symbols.findOrCreateIdentifier(lexeme.id_letter,lexeme.id_number);
                    idKey=String.format("String_Node_Str",lexeme.id_letter,lexeme.id_number);
                  }
 else {
                    id=ids.get(lexeme.string);
                    if (id == null)                     id=symbols.createIdentifier('X');
                    idKey=lexeme.string;
                  }
                  ids.put(idKey,id);
                }
              }
              if (chunk_value != null) {
                lexer.getNextLexeme();
                IdentifierImpl temp_id=symbols.createIdentifier(chunk_attr.getFirstLetter());
                String temp_key=temp_id.toString();
                WmeImpl newWme=new WmeImpl(intermediate_parent,chunk_attr,temp_id,false,0);
                wmes.add(newWme);
                if (lexer.getCurrentLexeme().type == LexemeType.R_PAREN) {
                  return_val=true;
                  lexer.getNextLexeme();
                  chunk_value=null;
                }
              }
            }
 while (chunk_value != null);
          }
        }
      }
    }
 else {
    }
  }
 else {
  }
  return return_val;
}

Fixed version (ground truth):
static boolean epmem_parse_chunk(SymbolFactoryImpl symbols,Lexer lexer,Map<String,IdentifierImpl> ids,Set<WmeImpl> wmes) throws IOException {
  boolean return_val=false;
  boolean good_at=false;
  lexer.getNextLexeme();
  if ((lexer.getCurrentLexeme().type == LexemeType.AT) || (lexer.getCurrentLexeme().type == LexemeType.IDENTIFIER) || (lexer.getCurrentLexeme().type == LexemeType.VARIABLE)) {
    good_at=true;
    if (lexer.getCurrentLexeme().type == LexemeType.AT) {
      lexer.getNextLexeme();
      good_at=(lexer.getCurrentLexeme().type == LexemeType.IDENTIFIER);
    }
    if (good_at) {
      Lexeme lexeme=lexer.getCurrentLexeme();
      String idKey;
      IdentifierImpl id;
      if (lexer.getCurrentLexeme().type == LexemeType.IDENTIFIER) {
        id=symbols.findOrCreateIdentifier(lexeme.id_letter,lexeme.id_number);
        idKey=String.format("String_Node_Str",lexeme.id_letter,lexeme.id_number);
      }
 else {
        id=ids.get(lexeme.string);
        if (id == null)         id=symbols.createIdentifier('X');
        idKey=lexeme.string;
      }
      ids.put(idKey,id);
      lexer.getNextLexeme();
      IdentifierImpl intermediate_parent;
      while (lexer.getCurrentLexeme().type == LexemeType.UP_ARROW) {
        intermediate_parent=id;
        lexer.getNextLexeme();
        SymbolImpl chunk_attr=epmem_parse_constant_attr(symbols,lexer.getCurrentLexeme());
        if (chunk_attr != null) {
          lexer.getNextLexeme();
          while (lexer.getCurrentLexeme().type == LexemeType.PERIOD) {
            IdentifierImpl temp_id=symbols.createIdentifier(chunk_attr.getFirstLetter());
            WmeImpl newWme=new WmeImpl(intermediate_parent,chunk_attr,temp_id,false,0);
            wmes.add(newWme);
            intermediate_parent=temp_id;
            lexer.getNextLexeme();
            chunk_attr=epmem_parse_constant_attr(symbols,lexer.getCurrentLexeme());
            lexer.getNextLexeme();
          }
          if (chunk_attr != null) {
            SymbolImpl chunk_value=null;
            do {
              chunk_value=null;
              if (lexer.getCurrentLexeme().type == LexemeType.SYM_CONSTANT) {
                chunk_value=symbols.createString(lexer.getCurrentLexeme().string);
              }
 else               if (lexer.getCurrentLexeme().type == LexemeType.INTEGER) {
                chunk_value=symbols.createInteger(lexer.getCurrentLexeme().int_val);
              }
 else               if (lexer.getCurrentLexeme().type == LexemeType.FLOAT) {
                chunk_value=symbols.createDouble(lexer.getCurrentLexeme().float_val);
              }
 else               if ((lexer.getCurrentLexeme().type == LexemeType.AT) || (lexer.getCurrentLexeme().type == LexemeType.IDENTIFIER) || (lexer.getCurrentLexeme().type == LexemeType.VARIABLE)) {
                good_at=true;
                if (lexer.getCurrentLexeme().type == LexemeType.AT) {
                  lexer.getNextLexeme();
                  good_at=(lexer.getCurrentLexeme().type == LexemeType.IDENTIFIER);
                }
                if (good_at) {
                  lexeme=lexer.getCurrentLexeme();
                  if (lexer.getCurrentLexeme().type == LexemeType.IDENTIFIER) {
                    id=symbols.findOrCreateIdentifier(lexeme.id_letter,lexeme.id_number);
                    idKey=String.format("String_Node_Str",lexeme.id_letter,lexeme.id_number);
                  }
 else {
                    id=ids.get(lexeme.string);
                    if (id == null)                     id=symbols.createIdentifier('X');
                    idKey=lexeme.string;
                  }
                  ids.put(idKey,id);
                }
              }
              if (chunk_value != null) {
                lexer.getNextLexeme();
                WmeImpl newWme=new WmeImpl(intermediate_parent,chunk_attr,chunk_value,false,0);
                wmes.add(newWme);
                if (lexer.getCurrentLexeme().type == LexemeType.R_PAREN) {
                  return_val=true;
                  lexer.getNextLexeme();
                  chunk_value=null;
                }
              }
            }
 while (chunk_value != null);
          }
        }
      }
    }
 else {
    }
  }
 else {
  }
  return return_val;
}