![](https://csdnimg.cn/release/download_crawler_static/86311088/bg5.jpg)
系统追求速度及效率还是选择了 C 语言,但是以一门类似 python 这样简单的语言处理身边的杂事,
不得不说,那是将会对整个工程的开发带来极大的方便。
在 JAVA 再次升级后,还有人不满意其虚拟机的执行效率,除了在追求开发速度及开发人员水平
等方面有诸多的限制因素时,C++依然是许多项目负责人的青睐语言,它们两者都是静态类型的语言,
其中 JAVA 是纯面向对象编程语言,而 C++兼容面向过程编程,C++博大精深,JAVA 简单方便,两者
都适合开发大型项目,而且配合设计模式,很容易使系统的耦合性升高,聚合性降低,极大的提高
了复用性。
脚本语言的出现使程序员处在欢乐而轻松的环境中编程,这其中不乏像 Perl,Ruby,Python 这
样使人为之一惊的语言。Perl 是魔鬼语言,它的语法诡异,而且配有强大的正则表达式库,简直是
那些不喜欢走平常路的程序员的救星,它提供的某些语法拯救了一些人饥渴的肚肠。还有 Ruby,也
足够使我们愉悦,它处理身边的琐事时是那么的方便,聪明的人绝不会使用 C 语言编译,链接产生
可执行程序并处理那些本可以使用 Ruby 不超过 10 行代码就可解决的问题。最后,很庆 幸 ,有 Python
这样一门简单的语言,它真的很简单,而且经过了时间的考验,越来越多的人开始使用 Python,它
的语法简单的超乎你的想象。
就各种语言的特性,以学习为目的,坚持简单为原则,本系统选择 Python 为参考语言,通过对
其设计思路的了解开发一门新型语言 EasyFront。
2.1
对 c 语言而言,预处理是十分重要的一个环节,在预处理阶段要对宏定义、文件包含、条件编
译等进行处理,预处理阶段一般只是简单的进行替换,一般从主文件切入,碰到所有#include 语句
将所对应的文件包含入当前编译的文件中,并在内存中记录所有#define 语句,凡是在以后的过程中
碰到在记录中的词素便全部替换,在此过程中对条件编译不符合部分进行删除,对符合部分进行保
留,在这一步骤中,将所有注释全部删除,其实不是删除,而是使用空格或空行替换,只保留有用
代码,处理完这一步之后,将处理后的数据交给词法分析处理。
2.2
词法分析是编译的第一阶段。词法分析器的主要任务是读入源程序的输入字符,将它们组成词
素,生成并输出一个词法单元序列,每个词法单元对应于一个词素。这个词法单元序列被输出到语
法分析器进行语法分析。词法分析器通常还要和符号表进行互交。当词法分析器发现了一个标识符
的词素时,它要将这个词素添加到符号表中。在某些情况下,词法分析器会从符号表中读取有关标
识符种类的信息,以确定向语法分析器传送哪个词法单元。
词法分析器在编译器中负责读取源程序,因此它还会完成一些识别词素之外的其他任务。任务
之一是过滤源程序中的注释和空白,另一个任务是将编译器生成的错误消息与源程序的位置联系起
来。例如,词法分析器可以负责记录遇到的换行符的个数,以便给每个错误消息赋予一个行号。
词法分析过程中使用输入缓冲往往能够提高程序执行效率,有时候还需要一个双缓冲,有些语
言的词法分析器还要能够回退以处理特殊情况的发生。在词法分析过程中大多数编译器使用有穷状
态机完成对词素的识别,一般会将词素文法规则定义在代码中,使用控制语句完成自动机的互相转
换,也有一部分编译器使用外部定义方式,使用程序解析文法规则,保存 NFA 的每个状态,将其转
换成 DFA,并对其压缩,最终实现自动化的处理,当然也可以使用 lex 系统简化词法分析工作,lex