Yuri-IL的解析

定义

Yuri引擎会在启动游戏的时候解析所有的Yuri-IL中间代码文件,恢复动作流程图,进行指令索引,并加载初始场景到调用堆栈。

IL对象的数据结构

动作包装SceneAction
字段名 类型 备注
NodeName String 节点名称(场景名_脚本中行号)
Type SActionType 动作类型
ArgsDict Dictionary 参数字典(K:参数名;V:参数的逆波兰式)
CondPolish String 条件子句的逆波兰式
Next SceneAction 下一指令指针
TrueRouting List 真值子路径
FalseRouting List 假值子路径
IsBelongFunc Boolean 是否是函数动作
ReliedFuncName String 包装该动作的函数名
Tag String 附加值
函数包装SceneFunction
字段名 类型 备注
Sa SceneAction 函数动作序列入口
Callname String 函数名
Param List 形参名字列表
ParentSceneName String 函数所属场景的名字
Symbols Dictionary 函数的符号表,即运行时上下文容器
LabelDictionary Dictionay 标签字典
场景包装Scene
字段名 类型 备注
Ctor SceneAction 场景动作序列入口
Scenario String 场景名
YuriDict Dictionary 动作索引
FuncContainer List 场景子函数向量
ParallellerContainer List 场景并行处理函数向量
LabelDictionary Dictionay 标签字典

将IL恢复为内存对象

Yuri引擎负责解析Yuri-IL中间代码的模块是Yuri.PlatformCore.VM.ILConvertor,它按照如下逻辑进行解析工作:

  • 检索脚本目录下所有的中间代码文件,以“.SIL”后缀名结束的文件,将读入的文件做行分割
  • 顺序遍历行分割的结果,将分割的行对象按场景按照行在文件里的顺序组织好
  • 对每个场景下的行,抽取其在全局脚本中的唯一编号来恢复代码逻辑关系。其过程是以这样的顺序做广度优先遍历
    • 恢复该中间代码行为一个动作序列SceneAction对象
    • 标记该行是的,即以后不再考虑这个行,也不从这个行继续搜索
    • 如果该对象是一个标签指令,那么记录它的位置
    • 处理该对象的Next指针,即下一指令指针
    • 处理该对象的真值路径TrueRouting,即该动作节点的子路径,在IF结构中,它是条件为真时的语句块;在FOR结构中,它是循环体语句块。
    • 处理该对象的假值路径FalseRouting,即该动作节点的条件子句不满足时的子路径。 在IF结构中,它是条件为假时的语句块。
  • 将处理完毕的动作序列包装成函数对象SceneFunction和场景对象Scene

注意资源必须被放置在正确的目录下才能被引擎正确地引用。

程序集信息

Property Value
层次结构 Yuri.PlatformCore.VM.ILConvertor
最低版本 1.0
并行安全