词法单元文件编码文档
前言
词法单元文件里存储着一系列词法单元,一些应用程序可以将自己的语言解析成Stamon的词法单元格式,保存在文件,剩下的语法分析等流程交给Stamon的编译器即可。
格式
词法单元文件的编码格式相对简单。
一个词法单元文件结构由以下几种规则构成:
- 每个词法单元文件的开头必须要有两字节的二进制码:0xABDC,此魔数用于区分于其他文件
- 词法单元文件中的数值存储采用大端存储(以Python的大端存储为标准)
- 词法单元标识是用于区分词法单元的数字标记,以
src/compiler/Lexer.cpp
当中的TOKEN_TYPE
枚举为准,特殊的,TokenEOL(换行)
被规定为-1
- 每个词法单元由一字节的词法单元标识和若干字节的词法单元数据组成
- 一些词法单元只有词法单元标识,不含有词法单元数据(即一些词法单元只占一字节)
我们来特别看看拥有词法单元数据的词法单元(以及词法单元数据的构成):
- 标识符单元(TokenIden):其词法单元由四字节的标识符长度和字节长度为标识符长度的标识符内容组成。
- 整数单元(TokenInt):其词法单元由四字节的整数数值组成。
- 双精度浮点数单元(TokenDouble):其词法单元由八字节的浮点数值组成
- 字符串单元(TokenString):其词法单元由四字节的字符长度和字节长度为字符串长度的字符串内容组成。