可用的回归测试通过的标准版本
This commit is contained in:
58
lib/Shell/Serializer.py
Normal file
58
lib/Shell/Serializer.py
Normal file
@@ -0,0 +1,58 @@
|
||||
import json
|
||||
import struct
|
||||
|
||||
|
||||
def SerializeSymbolTable(SymbolTable: dict) -> bytes:
|
||||
"""将符号表序列化为二进制格式
|
||||
|
||||
格式:
|
||||
- 4字节: JSON数据长度(小端序)
|
||||
- N字节: JSON数据(UTF-8编码)
|
||||
|
||||
Args:
|
||||
SymbolTable: 符号表字典
|
||||
|
||||
Returns:
|
||||
二进制字节数据
|
||||
"""
|
||||
JsonData = json.dumps(SymbolTable, ensure_ascii=False).encode('utf-8')
|
||||
length = len(JsonData)
|
||||
# 使用4字节小端序整数表示长度
|
||||
header = struct.pack('<I', length)
|
||||
return header + JsonData
|
||||
|
||||
|
||||
def deSerializeSymbolTable(data: bytes) -> dict:
|
||||
"""从二进制数据反序列化符号表
|
||||
|
||||
Args:
|
||||
data: 二进制字节数据
|
||||
|
||||
Returns:
|
||||
符号表字典
|
||||
"""
|
||||
if len(data) < 4:
|
||||
raise ValueError("Invalid symbin file: data too short")
|
||||
# 解析4字节长度头(小端序)
|
||||
length = struct.unpack('<I', data[:4])[0]
|
||||
JsonData = data[4:4+length]
|
||||
return json.loads(JsonData.decode('utf-8'))
|
||||
|
||||
|
||||
class SymbolFile:
|
||||
"""符号文件类,用于解析和存储符号信息"""
|
||||
|
||||
def __init__(self, file=None, string=None, type=None, encoding='utf-8'):
|
||||
"""初始化SymbolFile对象
|
||||
|
||||
Args:
|
||||
file: 文件路径
|
||||
string: 代码字符串
|
||||
type: 文件类型,支持"c"或"py"
|
||||
encoding: 文件编码
|
||||
"""
|
||||
self.FilePath = file
|
||||
self.CodeString = string
|
||||
self.FileType = type
|
||||
self.encoding = encoding
|
||||
self.symbols = {}
|
||||
Reference in New Issue
Block a user