本文采用 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 了。
标签:编译,AST,实践,Lv,Part1,Bison,拆分,文档 From: https://www.cnblogs.com/x383494/p/18063456