Blog Cover

解析器的代际战争:为什么GCC和Clang都选择了手写解析器

1975年,贝尔实验室的Stephen Johnson做出了一个决定:将C编译器从手写递归下降解析器切换到DeRemer的LALR算法。这是Unix历史上第一次大规模采用自动生成的解析器。然而不到二十年,GCC项目反其道而行之,重新改用手写解析器。Clang紧随其后。直到今天,几乎所有主流编译器——GCC、Clang、V8、Lua——都使用手写递归下降解析器。为什么解析器生成器在工业界遭遇滑铁卢?这场跨越半个世纪的"代际战争"背后,隐藏着怎样的技术权衡? ...

16 min · 7517 words

Markdown解析器的二十年博弈:为什么一行文本能引发如此复杂的技术战争

在Stack Overflow上搜索"Markdown解析",会出现超过2万个问题。其中最高赞的一个问题是:“为什么***foo***会被解析成斜体加粗,而***foo**却变成了粗体加星号?“这个看似荒谬的问题,实际上触及了Markdown解析器最核心的设计困境。 ...

9 min · 4487 words