一旦我们通过setSource方法设置好要解析的源字符串或者调用reset方法进行重新解析字符串时,则需要一些操作来获取当前字符或探测下一个字符,我们可以使用这几个成员方法,代码如下所示:
//获得当前的索引指向的char,并且将索引加1,后移一位
//后++特点是返回当前的索引,并将索引加1
//这样的话,_getChar返回的是当前要处理的char,而索引指向的是下一个要处理的char
private _getChar ( ) : string {
//数组越界检查
if ( this._currIdx >= 0 && this . _currIdx < this . _source . length ) {
return this . _source . charAt ( this . _currIdx ++ ) ;
}
return "" ;
}
//探测下一个字符是什么
//很微妙的后++操作
private _peekChar ( ): string {
//数组越界检查,与_getChar区别是并没移动当前索引
if ( this . _currIdx >= 0 && this . _currIdx < this . _source.length ) {
return this . _source . charAt ( this . _currIdx ) ;
}
return "" ;
}
private _ungetChar ( ) : void {
//将索引前移1位,前减减操作符
if ( this . _currIdx > 0 ) {
-- this . _currIdx ;
}
}
到此为止,我们构建了IDoom3Tokenizer词法解析器最小的运行环境,我们可以设置(setSource)或重置(reset)要解析的数据源,我们可以正向的获取(_getChar)当前字符,或探测(_peekChar)下一个字符,也可以反向归还(_ungetChar)一个字符。我们还可以知道当前字符是数字字符(_isDigit)或者是空白符(_isWhiteSpace)。下一小节我们将进入Token解析阶段。