# 词法单元文件编码文档

### 前言

词法单元文件里存储着一系列词法单元，一些应用程序可以将自己的语言解析成Stamon的词法单元格式，保存在文件，剩下的语法分析等流程交给Stamon的编译器即可。

### 格式

词法单元文件的编码格式相对简单。

一个词法单元文件结构由以下几种规则构成：

* 每个词法单元文件的开头必须要有两字节的二进制码：0xABDC，此魔数用于区分于其他文件
* 词法单元文件中的数值存储采用大端存储（以Python的大端存储为标准）
* 词法单元标识是用于区分词法单元的数字标记，以``src/compiler/Lexer.cpp``当中的``TOKEN_TYPE``枚举为准，特殊的，``TokenEOL（换行）``被规定为-1
* 每个词法单元由一字节的**词法单元标识**和若干字节的**词法单元数据**组成
* **一些词法单元只有词法单元标识，不含有词法单元数据**（即一些词法单元只占一字节）

我们来特别看看拥有词法单元数据的词法单元（以及词法单元数据的构成）：

* 标识符单元（TokenIden）：其词法单元由**四字节的标识符长度**和**字节长度为标识符长度的标识符内容**组成。
* 整数单元（TokenInt）：其词法单元由**四字节的整数数值**组成。
* 双精度浮点数单元（TokenDouble）：其词法单元由**八字节的浮点数值**组成
* 字符串单元（TokenString）：其词法单元由**四字节的字符长度**和**字节长度为字符串长度的字符串内容**组成。