@Nullable
public static <T extends Lexeme> T parse(final Class<T> lexemeClass, final String string) {
final String[] fields = string.split("\t");
if (fields.length < 2) {
return null;
}
final String id = fields[0].trim();
final List<Token> tokens = Lists.newArrayList();
for (final String tokenStr : fields[1].substring("tokens=".length()).split(",")) {
tokens.add(Token.parse(tokenStr.trim(), id));
}
final ImmutableMap.Builder<String, String> builder = ImmutableMap.builder();
for (int i = 2; i < fields.length; ++i) {
final String fieldStr = fields[i];
final int index = fieldStr.indexOf('=');
if (index < 0) {
final String key = fieldStr.trim().intern();
final String value = "true";
builder.put(key, value);
}
else {
final String key = fieldStr.substring(0, index).trim().intern();
final String value = fieldStr.substring(index + 1).trim().intern();
builder.put(key, value);
}
}
return create(lexemeClass, id, tokens, builder.build());
}