StringBuilder против канатов - PullRequest
4 голосов
/ 14 мая 2011

Доброе утро,

Я пишу синтаксический анализатор языка и ищу наилучшую структуру для использования в кэше отката, который в настоящее время выполняет следующие действия:

  • При запросе нового символа из потока этот символ добавляется в кэш, если требуется откат.
  • Когда запрашивается откат, вернитесь к определенной точке в кэше, чтобы при запросе другого символа он получал его оттуда.
  • Когда токен найден, удалите все из кэша отката до текущей позиции.

Короче говоря, я хотел бы знать, для какой структуры данных вы считаете лучшей:

  • Приоритет 1: добавление символов (приветствуются добавления codePoints)
  • Приоритет 2. Выполнение подстроки (например, StringBuilder.delete (...)) в структуре данных (или полная очистка)
  • Приоритет 3. Возможность создания строки из кэша (например, StringBuilder.toString ())

Надеюсь скоро услышать от вас!

Ответы [ 2 ]

1 голос
/ 14 мая 2011

На вашем месте, для такого специализированного использования и с возможными ограничениями производительности и ресурсов, я бы реализовал свой собственный буфер из примитивов.Я думаю, что больше проблем с адаптацией существующих структур.Конечно, если бы это не повредило, я бы попытался соответствовать известным интерфейсам, таким как CharSequence, Appendable, List и т. Д.

0 голосов
/ 14 мая 2011

Я подозреваю, что комбинация StringBuilder и PushbackReader даст вам то, что вам нужно.Используйте StringBuilder для накопления символов и создания строк токенов, а также методы mark и reset PushbackReader для реализации отката.

В качестве альтернативы предварительно прочитайте весь входной файл как строку, а затем реализуйте токенизатор с помощьюиндексирование строки и взятие подстрок.

...