如果要实现一个特定文件格式的词法解析器,一定要了解该文件的词法特征,根据文件的词法特征抽象出分类规则,然后才能编码实现词法解析功能。因此本小节来了解一下Doom3引擎中的文本文件的相关规则,使用如下一段具有普遍性的文本字符串:

numMeshes  5

/*
* joints关键字定义了骨骼动画的bindPose
*/
joints {
    "origin"    -1  ( 0 0 0 )  ( -0.5  -0.5  -0.5 )        
    "Body"    0  ( -12.1038131714  0  79.004776001 )  ( -0.5 -0.5 -0.5 )    // origin
}

  例如numMeshes、joints等没有双引号的单词,作为关键字处理,也就是Doom3引擎预先定义好的,具有特定含义的一些词,它们具有唯一性,不可更改性。

  例如 "origin"、"Body"这些具有双引号的单词,作为标识符处理,这些标识符并非由Doom3引擎预先定义,而是美术设计等相关人员或者模型制作动画师定义的名称。

  在/*和*/之间的文字被Doom3引擎的词法解析器视为注释,和TypeScript一样,表示多行注释。斜杠//后的文字则被视为单行注释,这也和TypeScript的单行注释保持一样性。

  大括号对{ }表示一个块状模块,你可以将其视为一个区块分组,和TypeScript作用域类似。小括号对( )内部是使用浮点数表示的矢量或矩阵数据,你可以将其看成数组表示,需要注意的一点是,数组元素之间不是使用逗号分隔,而是使用空格符号进行分隔。

  Doom3文本文件中的数据类型其实就两种:字符串和数字,其中关键字和标识符都可以看成字符串类型,而数字可以分为整数和浮点数两种类型。

  上述几条,基本囊括了Doom3文本文件格式的关键之处,还有一些隐藏在深处的规则,则由源码实现的过程中进行描述。

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

results matching ""

    No results matching ""