编译原理分为前端和后端
「前端」是用来处理 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 转化成实际的目标代码