这是一个用 Javascript 编写的简易编译器,它可以将 Common-Lisp 代码转换为 JavaScript 表达式并执行。它的核心**是将 Common-Lisp 代码转化为语法树结构,再将语法树结构转换为 JavaScript 代码格式。
在使用本编译器之前,请确保您已经安装了 Node.js 环境。然后,您可以下载该项目,并在项目目录下执行以下命令进行安装依赖:
npm install
安装完成后,您可以通过以下命令运行编译器:
npm index.js
编译器会将输出结果打印在命令行终端上,并且执行结果也会在终端上显示出来。
该编译器实现的核心**是将 Common-Lisp 代码转化为 JavaScript 格式,然后使用 JavaScript 引擎执行该代码。
概念上来讲,编译器的主要任务就是将一种语言翻译成另一种语言的程序,复杂的语言学话题暂且不论,要让一段复杂的程序被程序所认识,我们需要将其中的词法、语法以及语义准确地分析出来,并通过语法树将源码精准地翻译为目标语言(一般为机器语言或者低级语言)。
在转换过程中,为了保证转换后的代码能够在 JavaScript 中正确执行,该编译器需要做许多辅助处理工作,比如:处理 Common-Lisp 代码中的函数调用、变量声明、条件分支等等语法元素。
因为目前该编译器使用堆栈的形式对源语言进行语法分析,所以下面这种形式的Common-Lisp语句将无法分析:
(Function (Function a b)(Function c d))
在编译器分析完第一个函数后,会将下一个读取到的函数直接压在上面(于是生成的语法树就错误地变成了嵌套形式)
虽然在写的过程中注意到了这个问题,但是这种逻辑上的问题涉及到了设计**上的缺陷,应该需要另一种方式来进行语法分析,欢迎大家来讨论这个问题