用 Java 制作一个词法分析器,我正在使用 PushbackInputStream,因为我需要能够推回我读到的内容,以防它不是我想要的。但是每当流为空并且 read() 返回 -1 时。它不允许我使用 unread()。
编辑:我目前正在使用常规的 InputStream,一次读取所有内容,将其放入堆栈中,并将堆栈用作流,以便我可以对其进行 pop() 和 push() 项目。
用 Java 制作一个词法分析器,我正在使用 PushbackInputStream,因为我需要能够推回我读到的内容,以防它不是我想要的。但是每当流为空并且 read() 返回 -1 时。它不允许我使用 unread()。
编辑:我目前正在使用常规的 InputStream,一次读取所有内容,将其放入堆栈中,并将堆栈用作流,以便我可以对其进行 pop() 和 push() 项目。
I think your problem is that you are using a crufty 3rd-party pushback stream.
You probably should be using java.io.PushbackInputStream
or java.io.PushbackReader
which have a more clearly specified API, and don't do peculiar things like "flushing" the buffer.
如果您可以通过单一令牌前瞻和后推来解决问题,那么古朴而古老的StreamTokenizer
课程可能就足够了。它用于递归下降解析器的这个简单实现。
但是每当流为空并且 read() 返回 -1 时。它不允许我使用 unread()。
请详细说明“不允许我使用 unread()”。快速查看源代码应该可以正常工作。
也很想知道你为什么要推迟 EOF。