C语言子集编译系统的设计与实现文献综述
2020-04-28 20:18:23
在计算机领域,技术的好坏无疑是决定一个人才优劣的核心要素,随着近年来计算机行业的快速发展,计算机专业的人才的批量涌现,专业人才之间的竞争也变得越来越激烈。一方面计算机相关的人才总量呈现出井喷式的增长,另一方面,掌握核心技术的能做系统软件开发的技术人员太少,人才需求很大。而随着企业的发展,设计系统和平台的需求不断增加,这种供需矛盾将越来越明显。
究其原因,很容易想到我们的本科教育及其课程设置。美国顶尖大学计算机系基础课程教学里都非常重视项目时间,操作系统往往要真的开发一个像模像样的操作系统原型,编译原理课程也需要自己设计并实现一种语言的编译器。
而在计算机科学的各门课程中,编译原理又或者说编译器的设计实践有着特殊的重要性。编译原理的“龙书”主要作者、哥伦比亚大学教授Alfred V. Aho 曾经列举过编译器的实践能够带来的诸多好处:首先,编译器的实践能让学生领悟到理论与实践的完美结合。比如编译原理所涵盖的正则表达式和自动机,在各种场合的应用是极其广泛的,对正则的掌握程度,从某种意义上讲甚至可以作为技术人员水平的一项尺度。其次,编译器的实践能够让学生深入探索计算思维的多样性。与人类语言一样,不容类型的编程语言其实代表了不同的思维方式。只用过命令式语言的人可能没有想到,开启了大数据领域的Map与Reduce,其实在函数式语言是一种非常常见的东西。
诚然,深入了解编译器与编译原理,对于技术人员来说能够更好地理解和掌握自己最常用的语言和系统,从而提升自己的编程内力是有极大的好处的。另一方面,随着DSL(领域特定语言)的流行,需要技术人员开发自己语言的机会也越来越多。
编译原理作为计算机科学中公认的一门比较难的学科编译器通常被看作是十分复杂的工程。事实上,编写一个产品级的编译器也确实是一个庞大的任务。但是写一个小巧可用的编译器却不是这么困难。秘诀就是首先去找到一个最小的可用工程,然后把你想要的特性添加进去。这个方法也是Abdulaziz Ghuloum在他那篇著名的论文“一种构造编译器的捷径”里所提到的办法。不过这个办法确实可行。按照此方法一步步进行,就可以得到一个真正可用的编译器,然后从中学到更多更深的知识。
{title}2. 研究的基本内容与方案
{title}本毕业设计研究的基本内容是设计一个简单的C语言子集(SC语言)的编译系统(编译器),先后通过词法分析,语法分析,语义分析,代码生成等过程完成对SC语言的编译过程,而加深对本科阶段所学习的编译原理的理解。本次毕业设计的具体目标是将一个由SC语言编写的程序经过编译器转化为目标代码x86汇编语言进而生成可执行文件EXE。
在具体毕业设计的进行过程中,我打算按照以下流程进行相关知识的学习和毕业设计的实施。
(1)C/C 编程能力的强化:本次毕业设计我将选用C/C 来作为毕业设计的主要编程语言,在编程过程中要求对编程语言的运用和掌握比较熟练,所以这对我的编程能力是一次不小的考验,所以需要针对进行强化。
(2)熟悉x86的汇编指令编程:在生成目标代码的过程中需要对x86的汇编指令有相当的了解,这也需要我加强对这方面的继续学习。
(3)编译原理的学习:作为整个编译系统(编译器)的理论框架,只有将编译原理的整个理论知识融会贯通,才能在毕业设计的过程中明确每一步的目标和方向,并针对其中的问题找到相应的解决方案。