.\icu

Blog of @megakite.


January 1, 0001

# Lv1.2. 词法/语法分析初见

这一部分我先前曾在南大编译C版本中做过一部分,区别在于南大编译采用的是GCC,而本实验采用的是Clang,故编译过程有一些细节上的差异(比如_POSIX_C_SOURCE宏)需要注意。 就这一点来看,写出真正portable代码的难度还是挺高的。

# Lv1.3. 解析main函数

C真的不太适合干需要抽象的活……设计AST和IR生成系统时一个四面楚歌的局面是:

  1. 若为每种非终结符都定义一结构体,则重复代码量过大;
  2. 若用宏简化操作,则难以保证调试效率和类型安全;
  3. 若尽量用动态特性和函数式思维,则性能较差;
  4. 若实现伪继承(struct node_base_t base;),则复杂度较高,不便于内存管理,且代码中同样会有较多的重复内容以及噪音。 综合来看,反正这东西规模也不大,我还是觉得自己写得爽更重要,还是选3吧。