
大学
正常来说,一个demo级别的编译器与解释器,是顶尖
大学计算机专业学生经过一两个学期的编译课程学习后才能完成的大型作业,所以建议放弃。对于初学者而言,得补充大量知识才能够从零开始做这件事。不过,在不进行系统学习的情况下,也可以逐步深入(这也得花费数月时间):其一,表达式方面,像1+2*3这样的式子,可以转换为以下可执行的结构。中缀形式为1+(2*3);前缀形式是+1*2 3;后缀形式为2 3*1+。这里面中缀涉及优先级,前缀涉及抽象语法树(AST),后缀涉及字节码,初期建议直接执行AST。其二,复杂结构部分。对于赋值,这就开始需要运行环境来存储变量了;分支和循环主要是开始支持跳转;函数则要引入函数栈、参数压栈等支持。到这里基本上就形成了一个demo级别的语言(编译器 + 解释器)。其三,高级特性方面,像异常、析构、堆对象管理、类型系统等,这些基本上和编译器关系不大,更多的工作是在执行环境(虚拟机)上,这需要更多知识与时间。另外,宿主语言的选择非常关键。在功能相同的情况下,如果想要快速实现且不关注虚拟机细节,可以选用带虚拟机的语言,如C、
Java等;要是想完全自主,那
C++(几乎)是唯一的选择。附言:其实做到表达式这一步(花费数周)就可以停止了,然后去实现一个功能完整的正则表达式,这就已经很值得炫耀了。