给 Remusys-IR 写个文本前端(二)—— AST、语法分析和 IR 总体框架
Remusys-IR 是大框架简单、细节很复杂的语言。根据导览部分的分析,Remusys-IR Parser 使用递归下降语法分析器,在 IR 内存表示之外额外设计一层简单的 AST 来解决 IR 引用关系复杂、构建限制多的问题。 IR 总体架构和 LLVM IR 一样, Remusys-IR 的架构可以分为 模块 - 全局对象/函数 - 基本块 - 指令 这四层. 下面的 IR 文本片段展示了 Remusys-IR 的基本结构说明. 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152; name = hello.ll; 全局对象: 全局常量; 这里的 `sparse [...]` 是 Remusys-IR 自己的数组类型——稀疏数组.@LONG_ARRAY = dso_local constant [100 x i32] sparse [ [0] = i32 1, [1] = i32 1, [2] = i32 2, [3] = i32...
给 Remusys-IR 写个文本前端(一)—— 词法分析
词法分析器负责输入源码字符串,输出一串词法单元序列。它的接口是: 12345678910111213141516/// 表示直接供给语法分析器的 Token 类型。这种 token 经过序列化和整理,/// 合并了表示相同的不同语法, 方便给 parser 使用pub enum FinalToken { ... }pub struct IRLexer<'src> { ... }/// IRLexer 是个迭代器./// 之所以不直接输出一个 vec 之类的序列是因为这么做省内存impl<'src> Iterator for IRLexer<'src> { type Item = (Result<FinalToken, String>, logos::Span); fn next(&mut self) -> Option<Self::Item> { ... }}impl<'...
给 Remusys-IR 写个文本前端(〇)—— 序言
Remusys-IR 是我使用 Rust 编写的类 LLVM 中间代码组件。在 CSCC 竞赛期间, Remusys-IR 只有一个核心组件和少量优化器——这很合理,毕竟验证的事情可以交给 LLVM 来做,我没有解析文本输入的需求。但很快我发现 Remusys-IR 可以给我做毕设——我想搞一个 SSA IR 可视化的网页来弥补我前几年学 SSA 学歪了的遗憾,亲手编写的项目总比庞杂笨重还不太熟悉的 LLVM 合适。但这个时候要是还不支持 IR 文本输入的话, 那这个 IR 可视化到底要可视化些甚么就不得而知了。 所以我就得用 Rust 再给 Remusys-IR 写一套前端,就有了 Remusys-IR Parser 项目. 记这几篇文章主要防止以后我忘了代码是怎么写的,顺便还可以拿来当 Remusys-IR 的架构文档、使用说明之类的。 技术说明 Remusys-IR: 使用 Rust 编写的类 LLVM-IR 组件,采用 SSA-only 表示,控制流与数据流图分离。 smol_str: rust-analyzer 团队开发的不可变字符串实现, 采用内联小字符串、隐式共享等...
更新计划
新个人站建成以后, 一些老文章要迁移, 还有一些新东西要写. 但我已经熬了通宵, 撑不住了. 写个催更列表罢. Remusys-IR 系列Musys 系列编译器因为使用 Vala 编写,所以被废弃了。然而我还有一个 Rust 写的 Remusys 编译器系列——这个混得就比 Musys 好一些,有竞赛经历,还有毕设 DDL 催着。 这些文章将来可能会成为我毕设论文的重要参考. 一次简单的 Remusys-IR 可视化尝试 给 Remusys-IR 写个文本格式前端 词法分析器 语法分析器 类型系统、类型映射 符号系统、符号映射
Hello World Again
亏麻了家人们, 换个硬盘把原来那台 KVM 虚拟机丢了. 原来想着只要把换出来的系统盘拿来当移动硬盘使, 然后我一公一私两个博客都能保全;结果现在都丢完了, 原来那个 Fedora 系统连 GRUB 都进不去. 我的十几篇笔记和动态啊, 它咋办哪… 重新配置一遍吧, 反正新虚拟机运行了足足一个月, 生产力和原来那几台比真的遥遥领先, 重新搭个人站也不是问题. 所以现在是恢复专场, 我要把我原来那套 Hexo + Butterfly 的配置救回来. 配置简报该 Hexo 服务器运行在 Ubuntu QEMU/KVM 本地服务器内. 虚拟机平台: QEMU/KVM QEMU emulator version 9.1.2 (qemu-9.1.2-2.fc41) Virt-manager 4.1.0 主机 OS: Fedora Linux 41 (GNOME 47) 操作系统: Ubuntu 24.04 服务器版 NodeJS: v22.11.0 LTS, 从 https://nodejs.org/dist/v22.12.0/node-v22.12.0-linu...