一旦我们通过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解析阶段。

随风而行之青衫磊落险峰行(www.buleifeng.top) all right reserved,powered by Gitbook本文件修订时间: 2019-10-10 16:28:44

results matching ""

    No results matching ""