DevilKing's blog

冷灯看剑,剑上几分功名?炉香无需计苍生,纵一穿烟逝,万丈云埋,孤阳还照古陵

0%

Compile Thoery

原文链接

编译原理分为前端和后端

「前端」是用来处理 Context Free Language ,把 text 转化成 tokens ,然后再把 tokens 通过 syntax rules 转化成 AST 的过程。

其中把 text 转化成 tokens ,一般用到的技术是 Regular Expression ,也就是「正则表达式」,背后对应的是无状态的自动机 NFA , NFA 可以转化为 DFA 。

然后, tokens 根据 syntax rules 进行 semantic analysis 的过程,是通过 parser 来完成的。

因为 context free language 需要分析文本前后的联系,也就是所谓代码的内在关系,所以必须用到内存,但不必用到随机存取内存,因此就在无状态自动机基础上加上 stack memory ,变成 Pushdown Automaton ,也就是 PDA ,下推自动机。

「后端」就是把 AST 转化成实际的目标代码