首先声明一下,我们的IDoom3Tokenizer词法解析器仅支持ASCII编码字符串的解析,不支持UNICODE编码字符串的解析(换句话说,我们的词法解析器不支持中文解析),实际上Doom3引擎文本格式文件也仅支持ASCII编码的字符串。  然后再想强调一点,像Java的JDK,C#的.NET Framework或C语言的crt(C语言运行库)都内置了强大的ASCII字符处理函数,但是在TypeScript或JavaScript中处理ASCII字符的一些操作需要自己来实现,那么我们就先来实现两个简单但是必须的ASCII字符处理函数,具体代码如下:

  1. // 接口实现使用implements关键字
  2. class Doom3Tokenizer implements IDoom3Tokenizer {
  3. // 使用了初始化表达式方式初始化字符串数组
  4. private _digits : string [ ] = [ "0" , "1" , "2" , "3" , "4" , "5" , "6" , "7" , "8" , "9" ] ;
  5. private _whiteSpaces : string [ ] = [ " " , "\t" , "\v" , "\n" ] ;
  6. //判断某个字符是不是数字
  7. private _isDigit ( c : string ) : boolean {
  8. for ( let i : number = 0 ; i < this . _digits . length ; i++ ) {
  9. if ( c === this. _digits [ i ] ) {
  10. return true ;
  11. }
  12. }
  13. return false ;
  14. }
  15. //判断某个字符是不是空白符
  16. //一般我们将空格符(" "),水平制表符(\t),垂直制表符(\v)以及换行符(\n)统称为空白符
  17. private _isWhitespace ( c : string ) : boolean {
  18. for ( let i : number = 0 ; i < this . _whiteSpaces . length ; i++ ) {
  19. if ( c === this . _whiteSpaces [ i ] ) {
  20. return true ;
  21. }
  22. }
  23. return false;
  24. }
  25. }