今天是个好日子。
我正在使用sableCC,它需要一个 Reader 对象作为输入。例如,此代码可以正常工作:
compile (new StringReader ("print 1"));
因为 StringReader 在字符串结束后返回 -1:
StringReader sr = new StringReader("print 1");
while (sr.ready())
System.out.println (sr.read());
给出:
112
114
105
110
116
32
49
-1
... always -1
但是当我将相同的字符串写入文件“prog”时,没有任何额外的行或字符,并在其上创建 FileReader,编译器会在不存在的第二行中断,因为 FileReader 返回换行符而不是 -1 字符:
FileReader fr = new FileReader( new File("prog"));
while (fr.ready())
System.out.println (fr.read());
给出:
112
114
105
110
116
32
49
10
从文件阅读器获得与从 StringReader 相同的行为的最短方法是什么,或者 SableCC 允许旁观?