4

早上好,

我正在编写一个语言解析器,并且正在寻找用于当前执行以下操作的回滚缓存的最佳结构:

  • 当从流中请求一个新字符时,该字符被添加到缓存中,以防请求回滚。
  • 当请求回滚时,返回到缓存中的某个点,这样当请求另一个字符时,它会从那里获取它。
  • 找到令牌后,将回滚缓存中的所有内容删除到当前位置。

简而言之,我很想知道您认为哪种数据结构最适合:

  • 优先级 1:附加字符(codePoints 将是一个受欢迎的补充)
  • 优先级2:对数据结构做一个子字符串(如StringBuilder.delete(...))(或完全清除)
  • 优先级 3:能够创建缓存的字符串(例如 StringBuilder.toString())

我希望尽快获得你的消息!

4

2 回答 2

1

如果我是你,对于这种特殊用途并且可能存在性能和资源限制,我会从原语实现我自己的缓冲区。我认为适应现有结构更麻烦。当然,如果没有坏处,我会尝试符合众所周知的相关接口,例如CharSequence, Appendable,List等。

于 2011-05-14T11:00:55.113 回答
0

我怀疑 StringBuilder 的组合PushbackReader会给你你需要的东西。使用 StringBuilder 来积累字符并创建令牌字符串,并使用 PushbackReadermarkreset方法来实现回滚。

或者,将整个输入文件作为字符串预先读取,然后通过索引字符串并获取子字符串来实现标记器。

于 2011-05-14T10:47:09.557 回答