制作简易的编译器-从无到有
发布时间:2018-06-27

 制作简单的编译器需要怎么做?怎样从无做到有?跟着我的教学走,你会觉得很简单

  编译原理是计算机专业大三或者大四的必修课程之一,许多学员都会对学生提出硬性或者软性的制作简易编译器的要求。许多学生手足无措,别急,学长也是过来人,看完这个教程,保证你轻轻松松完成属于你自己的编译器。

  首先第一篇教程不会涉及具体的实现。在这种大工程之前,正确的模块划分是极为重要的。这样可以让你阶段性地看到自己的成果,对于自信心是一个极大的帮助;此外,正确的模块划分有助于后期排除错误。

  在此之前也介绍一下工作量。如果完全自己手撕一个编译器,其工作量可能和手撕一个CPU(用verilog)工作量差不多,大概会耗时一个月左右,不过如果只是交一个作业,完全不用全部自己完成。特别是语义分析这种工作,有大量现成的代码稍加修改就可以直接使用(当然,严格意义上来讲,所有部分都可以稍加修改直接使用)。

  我们将编译器制作分为以下四个模块分块实现完成:

  一、语法分析、词法分析模块(yacc、lex)

  yacc、lex是linux环境下的语法生成器和词法生成器,使用非常广泛。一般情况下老师也比较鼓励学生去用yacc和lex去完成这样的实验。需要说明的是,在现存的linux操作系统中,yacc和lex已经发生了变异。我们所采用的是ubuntu环境下的bison和flex。

  二、语义分析(C语言)

  语义分析是在词法分析语法分析结束,生成了语法树的基础上,对语法树进行遍历,建表,查错。

  三、中间代码生成(C语言)

  这一部分就是在语义分析的基础上,生成三元式、四元式之类的。

  四、目标代码生成(C语言)

  这一步就实现了从某种语言(你制定的语言)到MIPS代码的转换。有人说我不要MIPS,我要x86的,没问题,从中间引入llvm即可

  跟着我的教程走,学到哪里,编译器做到哪里;做到哪里,作业交到哪里。即使你只做了语法分析、词法分析,你也可以交一个语法生成树,就是这么简单、这么人性化。看到这里,如果符合你的要求,follow me;不符合的话,可以去看看其他的教程。