前言上一篇分享了一个简单的轻量级编译器翻译。为了加强对编译原理的理解,最近利用业余时间实现了一个中文代码解释器。本文介绍编译器的主要内容和实现步骤。因为在线demo的内容挂在了github上,打开后可能需要一段时间才能加载。如果打开速度慢,请耐心等待。项目内容项目地址https://github.com/gamedilong...,第一个版本简单方便有需要的同学学习,没有依赖,不使用任何脚手架。代码也是未压缩的。可以直接在浏览器中调试。项目名为cccinterpreter,主要取中文和编译器的缩写。主要功能是通过词法分析和句法分析两步,将中文代码编译成抽象语法树,然后将抽象语法树编译成js代码执行。实现步骤实现中文代码解释器生成ast语法树(代码根据acorn.js第一个gitlog调整修改);实现代码生成器将ast语法树编译成代码;通过monacoHighlight规则实现实现代码编辑器自定义中文;实现抽象语法树,在控制台显示当前抽象语法,并提供打印输出。综合以上内容实现功能。目前赋值、表达式、逻辑判断、函数、循环等相关语法提供了打印和定时器。两个上下文用于测试。在代码编辑窗口添加代码后,点击执行。右侧的抽象语法树和控制台将生成内容摘要。本项目的主要目的不是停留在编译原理的理论,而是在已有开源项目的基础上,通过实践加深对编译相关的理解。在学习的基础上做一些发散,后面会加入一些其他的上下文来实现一些有趣的东西。比如在node环境中添加上下文执行,添加一些界面上下文进行中文操作。另外,目前中文语法主要来自acorn.js,可以看作是js的汉化,以后可以自定义一些更符合中文语义的语法。
