在这个部分,咱们将建立一个“流对象”来提供从字符串读取字符的能力。“流对象”包含四个方法:bash
peek()
— 返回下一个值,但不会从流中移除。ui
next()
— 返回下一个值,而且从流中移除。spa
eof()
— 若是流里面没有值了,返回true
。.net
croak(msg)
— 处理 throw new Error(msg)
.code
这让咱们能跟踪当前位置(好比哪一行代码,第几列),对展现错误信息很是有用。对象
根据你的须要,还能够再加一些方法,但目前来看已经足够了。ip
字符输入流处理字符,因此next()
/ peek()
方法会返回chars(由于JavaScript没有char类型,因此以字符串的形式展现)。字符串
如下是这个对象的所有代码,命名为“InputStream”。代码不多很容易理解:get
function InputStream(input) {
var pos = 0, line = 1, col = 0;
return {
next : next,
peek : peek,
eof : eof,
croak : croak,
};
function next() {
var ch = input.charAt(pos++);
if (ch == "\n") line++, col = 0; else col++;
return ch;
}
function peek() {
return input.charAt(pos);
}
function eof() {
return peek() == "";
}
function croak(msg) {
throw new Error(msg + " (" + line + ":" + col + ")");
}
}复制代码
注意:它不是一个标准的对象(没有经过new
来建立)。用 var stream = InputStream(string)
来获得一个流对象
。input