2010-02-17 22 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