编译实践学习 Part1
本文采用 CC BY 协议发布。
闲话
开新坑辣!
参考 PKU 的文档做的。
为什么会做这个呢?之前看一位退役 OIer 的 Blog 然后发现了这个文档,想着自己退役之后也要做一个。主要是被文档最后的 awesome-sysy 吸引了。
其实之前我在 OI 里也写过 CYaRon!语 的 编译版本,所以算是有 Bear 来...?
开始前的准备
编译器是什么呢?大概是下面的一个东西。
- 输入一长串字符
- 拆成一堆短字符串
- 进行一堆运算
- 翻译成一长串字符
先看 step 1~2. 如何优雅地拆分输入的源代码呢?显然我们需要一个工具。
它就是 Flex 和 Bison。Bison 负责定义拆分成什么样,Flex 负责具体的拆分工作。
不用担心不会用,基本就是 C/C++ 语法,再加一些独有的东西。
但是先别急,在此之前要先配好环境,具体见 文档。
EBNF
EBNF, 即 Extended Backus–Naur Form, 扩展巴科斯范式。
形如 A ::= B
。
大概类似于 #define
?反正就是一通替换最后换无可换的时候就拆分完了。
具体细节还是要看原文档。
Hello World!
抽象语法树 (abstract syntax tree, AST)
定义几个类作为 AST 的组成部分。
然后一通返回指针就完事了。
目前的进度是输出 Lv 1.3 的内容。
UPD:git 不会用,被我玩炸了。现在进度回档到 Lv 1.2 了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY