编译实践学习 Part1

本文采用 CC BY 协议发布。

闲话

开新坑辣!

参考 PKU 的文档做的。

为什么会做这个呢?之前看一位退役 OIer 的 Blog 然后发现了这个文档,想着自己退役之后也要做一个。主要是被文档最后的 awesome-sysy 吸引了。

其实之前我在 OI 里也写过 CYaRon!语编译版本,所以算是有 Bear 来...?

开始前的准备

编译器是什么呢?大概是下面的一个东西。

  1. 输入一长串字符
  2. 拆成一堆短字符串
  3. 进行一堆运算
  4. 翻译成一长串字符

先看 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 了。

posted @   383494  阅读(33)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示