在這個部分,咱們將建立一個「流對象」來提供從字符串讀取字符的能力。「流對象」包含四個方法: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