2010-02-17 32 views
0

在Java中制作词法分析器,我使用的是PushbackInputStream,因为我需要能够推回所读取的内容,以防它不是我想要的。但是,只要流是空的,read()就返回-1。它不允许我使用unread()。编辑:我目前正在使用一个普通的InputStream,一次读取它,把它放入一个堆栈,并使用堆栈作为流,所以我可以弹出()和推()上的项目。如何在流为空后在PushBackBufferedInputStream中使用unread()?

回答

1

我认为你的问题是你正在使用一个crufty第三方回推流。

你可能应该使用java.io.PushbackInputStreamjava.io.PushbackReader它有一个更明确指定的API,并且不要做特殊的事情,比如“冲洗”缓冲区。

+0

糟糕!我实际上是使用java.io.PushbackInputStream。但是在发布这篇文章时,我在学校,无法访问我的代码,因此无法完全记得我使用的是什么。 – fent 2010-02-18 06:44:29

0

如果你可以通过单个令牌前瞻和回推获得,那么古怪的老师StreamTokenizer类就足够了。它用在递归下降解析器的简单implementation中。

+0

哇谢谢,但我实际上必须编码Tokenizer自己哈哈。 – fent 2010-02-18 06:43:13

0

但是,只要流为空,并且 read()返回-1。它不允许我 使用未读()。

请详细说明'不允许我使用未读()'。从简单的源代码看,它应该可以正常工作。

也很想知道为什么你要推回EOF。

+0

它给了我一个IOException。在流类似“FOO”的情况下,我试图找到“FOL”。我会阅读前两个字符,他们会匹配。但是当我阅读第三篇时,它不会。所以我需要把这3个字符放回空的流中,以便我可以将它与其他东西匹配。 – fent 2010-02-18 08:18:59

+0

什么是IOException的文本? – EJP 2010-02-18 10:05:53

+0

没什么,因为我在用catch。 >。> – fent 2010-02-19 05:27:14