January 1, 0001
# Lv1.2. 词法/语法分析初见
这一部分我先前曾在南大编译C版本中做过一部分,区别在于南大编译采用的是GCC,而本实验采用的是Clang,故编译过程有一些细节上的差异(比如_POSIX_C_SOURCE
宏)需要注意。
就这一点来看,写出真正portable代码的难度还是挺高的。
#
Lv1.3. 解析main
函数
C真的不太适合干需要抽象的活……设计AST和IR生成系统时一个四面楚歌的局面是:
- 若为每种非终结符都定义一结构体,则重复代码量过大;
- 若用宏简化操作,则难以保证调试效率和类型安全;
- 若尽量用动态特性和函数式思维,则性能较差;
- 若实现伪继承(
struct node_base_t base;
),则复杂度较高,不便于内存管理,且代码中同样会有较多的重复内容以及噪音。 综合来看,反正这东西规模也不大,我还是觉得自己写得爽更重要,还是选3吧。