豫言源码浏览器 / Source Browser

浏览项目文件与源码

yuyan · 597 行 · 34354 字节 · UTF-8
§
「:展开模式匹配类型
同时展开异常处理的内建操作符,
同时将顺序执行节点变成内联虑
同时把自由变量转换成内建变量
同时展开内建变量
:」

寻观「标准库」之书。
寻观「编译器核心」之「编译数据」之「抽象绑定树结构」之「抽象语法树」之「总集」之书。

。
寻观「编译器核心」之「编译数据」之「编译配置」之「编译期输出」之书。

寻观「编译器核心」之「编译数据」之「抽象绑定树结构」之「命名环境术」之书。

寻观「编译器核心」之「编译步骤」之「类型标注擦除」之「模式匹配消除」之书。

寻观「编译器核心」之「编译数据」之「操作符」之「操作符数据结构」之书。
寻观「编译器核心」之「顺序标识符」之「顺序标识符」之书。

寻观「编译器核心」之「编译步骤」之「类型标注擦除」之「模式匹配展开」之书。

「展开构造器节点」乃
  化「表达式」 「:类型:」而
  化(化(「列」于「表达式」)而「表达式」) 「:参数到最终节点的变换:」而
  化(「列」于「字符串」)而
  「表达式」
也。
「展开构造器节点」者会「类型」而会「最终构造」而会「已有参数」而
  鉴「类型」而
    有(「式节点」于「箭头类型节点」于(「缀」于「定义域」于(「缀」于「次类型」于「余类型们」)))
    则(
      虑「值域」者
        (
          鉴
            「余类型们」而
            有「罄」则「次类型」
            或有「非空余类型们」则
              「式节点」于「箭头类型节点」于(「缀」于「次类型」于「余类型们」)
        )而
        虑「新名」者「下个字符序数」于『构造器参数』而
        「式节点」
          于(「拉姆达抽象」于「显式」)
          于((「列」【
            (「进行抽象」
              于「新名」
              于(「展开构造器节点」
                于「值域」
                于「最终构造」
                于((「附加」授以「字符串」)
                于「已有参数」
                于(((「列」于「字符串」)也((「列」【「新名」】)))))))
          】))
    )
    或有(「式节点」于(「隐式派类型节点」于「参数个数」)于((「列」【「原绑定值域」】)))
    则(
      虑「新名及后值域」者
        「打开首隐式派类型」于
          「类型」于
          「已有参数」
      而
      「式节点」
        于(「拉姆达抽象」于「隐式」)
        于((「列」【
          (「进行抽象」
            于(「新名及后值域」中「零」)
            于(「展开构造器节点」于(「新名及后值域」中「一」)于「最终构造」于「已有参数」))
        】)
        )
    )
    或有「其他」则
      「最终构造」于((「态射」)于「已有参数」于「自由变量」)
也。

「:本函数调用前模式已经被顶部归一,所以不应该存在自由变量:」
「转换模式匹配模式」乃化「命名环境」而化「表达式」而「表达式」也。
「转换模式匹配模式」者会「境」而会「式」而
  鉴「式」而
    有(「式节点」于(「模式匹配新变量」于「名」)于「参」)则「式」
    或有(「式节点」于(「唯一构造器节点」于「序数」于「文件路径」于「构造器名」)于((「列」【「构造器类」】)))
    则(「式节点」于(「展开后唯一构造器节点」于「序数」)于「罄」)
    或有(「式节点」于(「整数节点」于「数」)于「罄」)则
      (「式节点」于(「整数节点」于「数」)于「罄」)
    或有(「式节点」于(「字符串节点」于「串」)于「罄」)则
      (「式节点」于(「字符串节点」于「串」)于「罄」)
    或有(「式节点」于(「内建节点」于「内建爻阳」)于「罄」)则
      (「式节点」于(「内建节点」于「内建爻阳」)于「罄」)
    或有(「式节点」于(「内建节点」于「内建爻阴」)于「罄」)则
      (「式节点」于(「内建节点」于「内建爻阴」)于「罄」)
    或有(「式节点」于「函数调用」于(「缀」于「体」于「参数节点们」))则(
      鉴(「转换模式匹配模式」于「境」于「体」)而
        有(「式节点」于(「展开后唯一构造器节点」于「序数」)于「已有参数」)
        则(
          递归虑「处理参数节点」其化(「列」于「表达式」)而化(「列」于「表达式」)而「表达式」者
            会「当前参数」而会「余参数节点们」而鉴「余参数节点们」而
              有「罄」则「式节点」
                于(「展开后唯一构造器节点」于「序数」)
                于「当前参数」
              或有(「缀」于(「式节点」于(「参数节点」于「隐式」)于「忽略参数们」)于「后参数节点们」)则
                「处理参数节点」
                  于「当前参数」
                  于「后参数节点们」
              或有(「缀」于(「式节点」于(「参数节点」于「显式」)于「用们」)于「后参数节点们」)则
                「处理参数节点」
                  于(「附加」
                    于「当前参数」
                    于((「态射」)于「用们」于(会「参数」而「转换模式匹配模式」于「境」于「参数」)))
                    于
                    「后参数节点们」
              或有「其他」则
                「发生事故」于『模式函数调用脊不是参数节点』
          而
          「处理参数节点」于「已有参数」于
          「参数节点们」
        )
        或有「其他」则
          「发生事故」于(『期待展开后节点或新变量,不可以被调用』附(「表达式表示」于「式」))
    )
    或有(「式节点」于(「元组构造节点」)于「元素们」)则(「式节点」
      于(「元组构造节点」)
      于((「态射」)于「元素们」于(会「素」而「转换模式匹配模式」于「境」于(「素」))))
    或有「其他」则
      「发生事故」
        于『不支持的模式匹配项』附(「表达式表示」于「式」)附『,环境:「:换行:」』附(「命名环境表示」于「境」)
也。

「模式匹配转换」乃
  化「命名环境」而
  化「表达式」而
  「表达式」 「:标注后的类和物:」
也。
「模式匹配转换」者会「境」而
  会「式」而
    递归虑「绑定对象模式匹配转换」其(化「命名环境」而
    化「表达式」 「:对象(是一个绑定):」而
    化「表达式」 「:绑定类型:」而
    「表达式」 「:检查过的对象(是一个绑定):」
  )者(会「境」而
  会「绑定物」而
  会「绑定类型」而
  (
    虑「绑名」者「获取可能绑定名」于「绑定物」而
    虑「新绑名及新境」者「添加声明」于「境」于「绑名」于「绑定类型」而
    虑「新绑名」者(「新绑名及新境」)中「零」而
    虑「绑体」者
      「式替换」于(「自由变量」于(「新绑名及新境」)中「零」)
      于(「绑定物」)
    而
    虑「绑定体物」者
      「模式匹配转换」于(「新绑名及新境」中「一」)于「绑体」而
    「:TODO 验证模式匹配转换中没有绑定名:」
    (「进行抽象」于「新绑名」于(「绑定体物」))
  ))而
  虑「无」者
    「详细调试打印行」于(会「无」而『模式匹配转换中』附(「表达式表示」于「式」))
  而
  虑「处理」者
    (「尝试运行」授以「表达式」)
    于(会「无」而
    虑「递归处理」者
      (遇「表达式」者「甲」而(「模式匹配转换」于「境」于「甲」))
  而
  鉴「式」而
    有(「式节点」于(「参数节点」于「形」)于「参数们」)则
      (「表达式统一操作」于「递归处理」于「式」)
    或有(「式节点」于「函数调用」于(「缀」于「函数」于「参数节点们」))则
      (「表达式统一操作」于「递归处理」于「式」)
    或有(「式节点」于(「文件定义引用节点」于「文件名」于「投影名」于「序数」)于「罄」)则
      「式」
    或有(「式节点」于(「结构投影带序数」于「串」于「序数」)于((「列」【「前式」】)))则
      (「发生事故」于『模式匹配转换阶段不应再出现结构投影带序数:』附「串」)
    或有(「自由变量」于「名」)则
      「:我们在此处把自由变量换成内建的:」
      (
        虑「后自由」者
          (
            鉴「名」而
              有『《《内建类型:字符串》》』则
                「式节点」
                  于(「内建节点」于(「内建类型字符串」))
                  于「罄」
              或有『《《内建类型:整数》》』则
                「式节点」
                  于(「内建节点」于(「内建类型整数」))
                  于「罄」
              或有『《《内建类型:小数》》』则
                「式节点」
                  于(「内建节点」于(「内建类型小数」))
                  于「罄」
              或有『《《内建类型:动态分类值》》』则
                「式节点」
                  于(「内建节点」于(「内建类型动态分类值」))
                  于
                  「罄」
              或有『《《内建类型:有》》』则
                「式节点」
                  于(「内建节点」于(「内建类型有」))
                  于
                  「罄」
              或有『《《内建类型:爻》》』则
                「式节点」
                  于(「内建节点」于(「内建类型爻」))
                  于
                  「罄」
              或有『《《内建类型:元类型》》』则
                「式节点」
                  于(「内建节点」于(「内建类型元类型」))
                  于
                  「罄」
              或有『《《内建爻:阳》》』则
                「式节点」
                  于(「内建节点」于(「内建爻阳」))
                  于「罄」
              或有『《《内建爻:阴》》』则
                「式节点」
                  于(「内建节点」于(「内建爻阴」))
                  于「罄」
              或有『《《内建有:元》》』则
                「式节点」
                  于(「内建节点」于(「内建有元」))
                  于「罄」
              或有『《《内建函数:抛出异常字符串》》』则
                「式节点」
                  于(「内建节点」于(「内建函数抛出异常」))
                  于
                  「罄」
              或有『《《内建函数:尝试运行字符串》》』则
                「式节点」
                  于(「内建节点」于(「内建函数尝试运行」))
                  于
                  「罄」
              或有『《《内建函数:整数:相等》》』则
                「式节点」
                  于(「内建节点」于(「内建函数整数相等」))
                  于
                  「罄」
              或有『《《内建函数:整数:大于》》』则
                「式节点」
                  于(「内建节点」于(「内建函数整数大于」))
                  于
                  「罄」
              或有『《《内建函数:整数:减》》』则
                「式节点」
                  于(「内建节点」于(「内建函数整数减」))
                  于「罄」
              或有『《《内建函数:以当前续延调用》》』则
                「式节点」
                  于(「内建节点」于(「内建函数以当前续延调用」))
                  于
                  「罄」
              或有「其他」则「式」
          )
        而
        鉴「后自由」而
          有(「自由变量」于「后名」)则「式」
          或有「其他」则
            「模式匹配转换」于「境」于「后自由」
      )
    或有(「式节点」于(「内建节点」于「量」)于「罄」)则(
      鉴「量」而
        有「内建函数抛出异常」则(「式节点」
          于(「拉姆达抽象」于「隐式」)
          于(「列」【
            (「进行无名抽象」于( 「:者是返回值类:」
              「式节点」
                于(「拉姆达抽象」于「显式」)
                于((「列」【
                  (「构造抽象」
                    于
                    『异常字符串』于(会「异常字符串」而
                      「式节点」
                        于「内联虑」
                        于((「列」【
                          (「式节点」于(「解析后外部调用节点无类型」于『豫言_获取当前异常处理器』)于「罄」),
                          (「构造抽象」
                            于
                            『处理函数』
                              于(会「处理函数」而(「添加函数调用参数」
                                于(「自由变量」于「处理函数」)
                                于
                                「显式」于(「自由变量」于「异常字符串」))))
                        】))))
                】))))
          】))
        或有「内建函数尝试运行」则(「式节点」
          于(「拉姆达抽象」于「隐式」)
          于(「列」【
            (「进行无名抽象」于( 「:者是返回值类:」
              「式节点」
                于(「拉姆达抽象」于「显式」)
                于((「列」【
                  (「构造抽象」
                    于『尝试结构』
                    于(会
                    「尝试结构」而
                    「式节点」
                      于「续延调用节点」
                      于((「列」【
                        (「构造抽象」
                          于『尝试续延』
                          于(会
                          「尝试续延」而
                          「式节点」
                            于「内联虑」
                            于((「列」【
                              (「式节点」于(「解析后外部调用节点无类型」于『豫言_获取当前异常处理器』)于「罄」),
                              (「构造抽象」
                                于
                                『先前异常处理器』
                                  于(会「先前异常处理器」而「式节点」
                                    于「内联虑」
                                    于((「列」【
                                      (「式节点」
                                        于(「拉姆达抽象」于「显式」)
                                        于((「列」【
                                          (「构造抽象」
                                            于『异常字符串』
                                            于(会「异常字符串」而「式节点」
                                            于「内联虑」
                                            于((「列」【
                                              (「式节点」
                                                于(「解析后外部调用节点无类型」于『豫言_设置当前异常处理器』)
                                                于((「列」【(「自由变量」于「先前异常处理器」)】))),
                                                (「进行无名抽象」
                                                  于(「添加函数调用参数」
                                                  于(「自由变量」于「尝试续延」)
                                                  于「显式」
                                                  于(「添加函数调用参数」
                                                  于(「式节点」
                                                  于(「元组解构节点」于「一」)
                                                  于((「列」【(「自由变量」于「尝试结构」)】)))
                                                  于「显式」
                                                  于(「自由变量」于「异常字符串」))))
                                            】))))
                                        】))),
                                        (「构造抽象」
                                          于『新的异常处理器』
                                          于(会「新的异常处理器」而「式节点」
                                          于「内联虑」
                                          于((「列」【
                                            (「式节点」
                                              于(「解析后外部调用节点无类型」于『豫言_设置当前异常处理器』)
                                              于((「列」【(「自由变量」于(「新的异常处理器」))】))),
                                              (「进行无名抽象」
                                                于(「式节点」
                                                于「内联虑」
                                                于((「列」【
                                                  (「添加函数调用参数」
                                                    于(「式节点」
                                                    于(「元组解构节点」于「零」)
                                                    于((「列」【(「自由变量」于「尝试结构」)】)))
                                                    于「显式」
                                                    于(「式节点」于(「展开后内建节点」于「内建有元」)于「罄」)),
                                                    (「构造抽象」
                                                      于『返回值』
                                                      于(会「返回值」而「式节点」
                                                      于「内联虑」
                                                      于((「列」【
                                                        (「式节点」
                                                          于(「解析后外部调用节点无类型」
                                                          于『豫言_设置当前异常处理器』)
                                                          于((「列」【(「自由变量」于(「先前异常处理器」))】)))
                                                          ,
                                                          (「进行无名抽象」
                                                            于((「添加函数调用参数」
                                                            于(「自由变量」于「尝试续延」)
                                                            于「显式」
                                                            于(「自由变量」于「返回值」))))
                                                      】))))
                                                】))))
                                          】))))
                                    】))))
                            】))))
                      】))))
                】))))
          】))

        或有「内建函数以当前续延调用」则(「式节点」
          于(「拉姆达抽象」于「隐式」)
          于(「列」【
            (「进行无名抽象」于( 「:是返回值类:」
              「式节点」
                于(「拉姆达抽象」于「显式」)
                于(「列」【
                  (「构造抽象」
                    于
                    『续延调用函数』于(会「续延调用函数」而
                      「式节点」
                        于「续延调用节点」
                        于(「列」【
                          (「构造抽象」
                            于『当前续延』
                            于(会
                            「当前续延」而「式节点」
                              于「内联虑」
                              于(「列」【
                                (「式节点」于(「解析后外部调用节点无类型」于『豫言_获取当前异常处理器』)于「罄」),
                                (「构造抽象」
                                  于
                                  『先前异常处理器』
                                    于(会「先前异常处理器」而(「添加函数调用参数」
                                      于(「自由变量」于「续延调用函数」)
                                      于「显式」
                                      于(「式节点」
                                        于(「拉姆达抽象」于「隐式」)
                                        于(「列」【
                                          (「进行无名抽象」
                                            于( 「:这个是Throw的返回值类型:」
                                            (「式节点」
                                              于(「拉姆达抽象」于「显式」)
                                              于((「列」【
                                                (「构造抽象」
                                                  于『续延提前返回值』
                                                  于(会「续延提前返回值」而「式节点」
                                                  于「内联虑」
                                                  于((「列」【
                                                    (「式节点」
                                                      于(「解析后外部调用节点无类型」于『豫言_设置当前异常处理器』)
                                                      于((「列」【(「自由变量」于「先前异常处理器」)】))),
                                                      (「进行无名抽象」
                                                        于((「添加函数调用参数」
                                                        于(「自由变量」于「当前续延」)
                                                        于「显式」
                                                        于(「自由变量」于「续延提前返回值」))))
                                                  】))))
                                              】)))))
                                        】)))))
                              】)))
                        】)))
                】)))
          】))
        或有「其他」则(「展开构造器节点」
          于(「内建物类型」于「量」)
          于(会「参数们」而「式节点」于(「展开后内建节点」于「量」)于「参数们」)
          于「罄」)
    )
    或有(「式节点」于(「拉姆达抽象带类型」于「拉形」)于((「列」【「原抽象类型」,「拉参」】)))
    则
      「:TODO:应该有很多可能性:」
      (
        虑「后体物」者
          「绑定对象模式匹配转换」于「境」于「拉参」于「原抽象类型」
        而
        (「式节点」于(「拉姆达抽象带类型」于「拉形」)于((「列」【「原抽象类型」,(「后体物」)】)))
      )
    或有(「式节点」于(「爻分支节点」)于(「列」【「爻式」,「阳式」,「阴式」】))
    则(
      虑「后爻式」者(「模式匹配转换」于「境」于「爻式」)而
      虑「后阳式」者(「模式匹配转换」于「境」于「阳式」)而
      虑「后阴式」者(「模式匹配转换」于「境」于「阴式」)而
      (「式节点」于(「爻分支节点」)于(「列」【「后爻式」,「后阳式」,「后阴式」】))
    )
    或有(「式节点」于(「整数节点」于「数」)于「罄」)则
      (「式节点」于(「整数节点」于「数」)于「罄」)
    或有(「式节点」于(「小数节点」于「数」于「整小部」)于「罄」)则
      (「式节点」于(「小数节点」于「数」于「整小部」)于「罄」)
    或有(「式节点」于(「字符串节点」于「串」)于「罄」)则
      (「式节点」于(「字符串节点」于「串」)于「罄」)
    或有(「式节点」于(「元组类型节点」)于「类型们」)则
      (「式」)
    或有(「式节点」于「内联虑带类型」于(「列」【「定义类」,「定义式」,「尾式」】))
    则(
      虑「后定义式」者(「模式匹配转换」于「境」于「定义式」)而
      虑「后尾式物」者
        「绑定对象模式匹配转换」于「境」于「尾式」于「定义类」
      而
      (「式节点」于「内联虑带类型」于(「列」【「定义类」,「后定义式」,「后尾式物」】))
    )
    或有(「式节点」于(「递归节点」)于((「列」【「递归定义域」,「递归值域」】)))
    则(
      虑「后递归值域」者
        (「绑定对象模式匹配转换」于「境」于「递归值域」于「递归定义域」)
      而
      (「式节点」于(「递归节点」)于((「列」【「递归定义域」,「后递归值域」】)))
    )
    或有(「式节点」于「模式匹配」于(「缀」于「分析式」于「分支们」))
    则(
      虑「后分析式物」者「模式匹配转换」于
        「境」于「分析式」而
        虑「后分支们式」者
          (「态射」授以「表达式」授以「表达式」)
          于
          「分支们」
            于(会「分支」而(「模式匹配转换」于「境」于「分支」))
        而
        虑「展开后结果」者
          (「展开模式匹配顶层」
            于(「式节点」于(「模式匹配」)于((「缀」授以「表达式」)于(「后分析式物」)于(「后分支们式」))))
        而
        鉴「展开后结果」而
          有(「式节点」于「模式匹配」于「参」)则(「展开后结果」)
          或有「其他」则(「展开后结果」)
    )
    或有(「式节点」于(「模式匹配分支」)于((「列」【「模式」,「结果」】)))
    则(
      虑「模式新变量们」者「读取模式匹配新变量」于「模式」而
      虑「无」者
        (
          若(「出现重复」授以「字符串」)于「串相等」于
            「模式新变量们」则「发生事故」
              于『模式有重复变量』附(「表达式表示」于「模式」)
          否则
            (「元」)
        )
      而
      虑「归一后模式」者「模式」
      而
      虑「归一后模式新变量们」者「读取模式匹配新变量」于
        「归一后模式」
      而
      虑「无」者
        (
          若(「不等于」于(「长度」于(「归一后模式新变量们」))于(「长度」于(「模式新变量们」)))则
            「发生事故」
              于
              『模式的归一并未完全保持新变量(1)』附(「表达式表示」于「模式」)附『,』附(「表达式表示」
                于
                「归一后模式」)
          否则
            (
              若((「互为子集」授以「字符串」)于「串相等」于(「归一后模式新变量们」)于(「模式新变量们」))则
                「元」
              否则
                「发生事故」
                  于
                  『模式的归一并未完全保持新变量(2)』附(「表达式表示」于「模式」)附『,』附(「表达式表示」
                    于
                    「归一后模式」)
            )
        )
      而
      虑「新境」者「添加模式匹配声明」于「境」于「归一后模式」
      而
      虑「展开后模式」者「转换模式匹配模式」于「境」于
        「归一后模式」
      而
      虑「分支物」者(「模式匹配转换」于「新境」于「结果」)而((「式节点」
        于(「模式匹配分支」)
        于(((「列」于「表达式」)也((「列」【(「展开后模式」),(「分支物」)】)))))
      )
    )
    或有(「式节点」于(「元组构造节点」)于「元素们」)
    则(
      虑「后式」者
        (「式节点」
          于(「元组构造节点」)
          于((「态射」)于「元素们」于(会「元素」而「模式匹配转换」于「境」于「元素」)))
      而
      「后式」
    )
    或有(「式节点」于(「元组解构节点」于「序数」)于((「列」【「元组」】)))
    则(
      虑「后对子式」者
        「模式匹配转换」于「境」于
          「元组」
      而
      (「式节点」于(「元组解构节点」于「序数」)于((「列」【(「后对子式」)】)))
    )
    或有(「式节点」于「顺序执行节点」于((「列」【「式甲」,「式乙」】)))
    则(
      虑「后式甲式」者
        「模式匹配转换」于
          「境」于「式甲」
      而
      虑「后式乙式」者「模式匹配转换」于「境」于「式乙」而(「式节点」
        于
          「内联虑」
            于((「列」【(「后式甲式」),(「进行无名抽象」于(「后式乙式」))】)))
    )
    或有(「式节点」于(「唯一构造器节点」于「序数」于「文件路径」于「构造器名」)于((「列」【「构造器类」】)))
    则(((「展开构造器节点」
      于「构造器类」
      于(会「参数们」而
        「展开展开后唯一构造器节点」于(「式节点」于(「展开后唯一构造器节点」于「序数」)于「参数们」))于
          「罄」)
      )
    )
    或有(「式节点」于(「文件引用节点」于「新文件名」)于「罄」)则
      ((「式节点」于(「文件引用节点」于「新文件名」)于「罄」))
    或有(「式节点」于(「解析后外部调用节点带类型」于「串」)于(「缀」于「类」于「参」))则
      ((「式节点」于(「解析后外部调用节点带类型」于「串」)于(「缀」于「类」于「参」)))
    或有(「式节点」于「箭头类型节点」于「参」)则
      (「式」)
    或有(「式节点」于(「隐式派类型节点」于「忽略参数个数」)于「参」)则
      (「式」)
    或有「其他」则
      「发生事故」于『未有模式匹配转换126:』附(「表达式表示」于「式」))
      于(会「异常」而「发生事故」于「异常」附『「:换行:」在模式匹配转换』附(「表达式表示」于「式」)附『时』)
        而

        「处理」
也。

「模式匹配转换顶层」乃化「表达式」而「表达式」也。
「模式匹配转换顶层」者会「式」而
  「模式匹配转换」于「默认命名环境」于「式」
也。