编译器设计04-谋篇布局

目前进展

到现在,我们还远远不能做出一个真正的编译器,甚至对编译过程中的诸多细节也一知半解,模糊不清。虽然如此,但我们还是对整个流程有一个大的理解,这帮助我们后续的设计。目前,我们已知:

  1. 编译器是将源代码通过复杂的处理过程转化为目标代码的程序。
  2. 编译过程分两个阶段,第一阶段源代码进,语法树出;第二阶段语法树进,目标代码出。第一阶段称为分析,处理者统称前端;第二阶段称为综合,处理者统称后端。
  3. 编译过程,其本质就是文本到树再到文本,有结构化思维的人会很容易想到,这其实就是阅读和写作的过程,从书里的文本建立你脑海中的知识结构,再把这知识结构用你自己的语言表达出来。
  4. 编译好比英文文章翻译中文文章,源代码是英文文章,目标代码是中文文章,语法树体现翻译要点各种关系,是你翻译过程的主要笔记。
  5. 前端处理:词法分析语法分析语义分析
  6. 后端处理:中间代码生成目标代码生成贯穿各个阶段的优化

后续计划

直接对编译的细节进行完善的讲解,内容太多,也不是我们的计划。如果需要完善的讲解,看相关编译原理的书或许更加合适。我们的目的就是针对编译原理小白做出一门真正的语言,直接体会编译核心要点。后续的内容,我们会具体设计一门实用的简单编程语言来展现完整的过程,源代码是新语言,目标代码为Python语言,设计过程需要对诸如Python,Java,C/C++等主流最热门语言有所了解。

设计背景

目前的设计愿景如下,后续会针对实践的问题进行完善和改进。

编程语言是人与计算机之间沟通的桥梁,它可以把人们想要完成的任务交给计算机完成。对于很多编程群体来说,或许程序效率之类的考虑反而是次要的,他们更需要的是一种简单易用的编程工具,比如学生(尤其初学者)。而对于学生,往往很多时候都需要借助大量数学知识去解决问题,因此我们想做一种简单易用的数学风格语言,以适合大学生做一些日常普通的学习任务。

除了让目标语言贴近数学外,我们还想让其支持通用的分布式编程。截止目前,大多数分布式编程一般针对具体应用场景,并且学习门槛都比较高,对编程新手不太友好,且通用性较差,比如云计算,CUDA编程等。因此我们想让设计的语言具有分布式编程的特点,且具有一定的通用性,具体做法就是通过语言设计总结出有效的编程规范,然后通过编译器屏蔽数据同步的复杂细节。

在具体设计之前,我们可以回顾当前最热门的几门语言来提供思路:Java,Python,C/C++。这些语言都各有优点和缺点,C语言简单高效,但在面向对象编程方面能力不足;C++功能强大,但函数规范和库繁杂;Java规范易用,但日渐规模臃肿;Python简单易用,但语言规范方面稍欠。很显然语言的规范性,易用性,功能性都是值得考虑的地方。
经过深思熟虑和反复推敲之后,我们做出了具有如下基本功能的分布式数学计算语言SimpleSYNC:

  1. 支持分布式编程,且具有较好的通用性
  2. 语言风格贴近数学,编程设计门槛较低
  3. 原生支持复数类型,让数学计算更省心
  4. 统一繁杂的数值类型:整数/实数/复数
  5. 支持数学式的函数定义,方便科学计算
  6. 拥有多种实用数组类型,简化问题模型

你可能感兴趣的:(零基础编译器设计,python)