《TypeScript图形渲染实战:2D架构设计与实现》 —2.2.12 实现_getString方法解析字符串
2.2.12 实现_getString方法解析字符串
本节来看一下正常的字符串是如何解析的,实现代码如下:
// 进入该函数,说明肯定不是数字,不是单行注释,不是多行注释,也不是子字符串
// 进入该函数只有两种类型的字符串,即不带双引号或单引号的字符串及specialChar
private _getString ( token: Doom3Token ): void {
// 获取当前字符,因为前面已经判断为字符串了
let c : string = this . _getChar ( ) ;
token . setType ( ETokenType . STRING ) ;
// 进入循环
do {
//将当前的char添加到Token中
token . addChar ( c ) ;
if ( ! this . _isSpecialChar ( c ) ) {
c = this . _getChar ( ) ; // 只有不是特殊操作符号的字符,才调用_getChar
移动当前索引
}
//如果this . _isSpecialChar ( c )为true,不会调用_getChar()函数,并且
满足了跳出while循环的条件
//结束条件:数据源解析全部完成,或下一个是空白符或者当前字符是特殊符号
} while ( c . length > 0 && ! this._isWhitespace ( c ) && !
this._isSpecialChar ( c ) ) ;
}
代码注释比较详细,各位读者可以了解一下。这里会看到,和子字符串不同的一点是,_getString会将一些特殊的字符(标点符号)作为单独的Token返回,具体有哪些特殊的字符,其实依赖于个人的决策。在默认情况下,实现代码如下:
// 将左边和右边的大、中、小括号及点号逗号都当作单独的Token进行处理
// 如果想要增加更多的标点符号作为Token,可以在本函数中进行添加
private _isSpecialChar ( c : string ) : boolean {
switch ( c ) {
case '(' :
return true ;
case ')' :
return true ;
case '[' :
return true ;
case ']' :
return true ;
case '{' :
return true ;
case '}' :
return true ;
case ',' :
return true ;
case '.' :
return true ;
}
return false ;
}
Doom3文本文件词法解析器的源码都演示完毕了,最好的研究源码方式是断点调试,大家可以去本书前言中的“本书配套资源获取方式”介绍的网站下载本章的源码进行调试。
- 点赞
- 收藏
- 关注作者
评论(0)