如何实现一款中文代码解释器

前言

上一篇分享过一个简单的轻量级编译器翻译。为了加强自己对编译原理的理解,最近利用业余时间实现了一个中文的代码解释器。本篇介绍一下该编译器的主要内容和实现步骤。
在线演示

image

因为内容是挂在github上,打开后可能要加载一段时间。如打开较慢,请耐心等待一下.

项目内容

  1. 项目地址 https://github.com/gamedilong/ccc, 第一版为了简单且方便有需要的同学学习,无依赖且没有使用任何脚手架。代码也未压缩。可以直接在浏览器调试。
  2. 该项目命名为ccc解释器,主要取中文和编译器的简写。
  3. 主要功能,将中文代码通过词法分析,语法分析两个步骤编译成抽象语法树,然后将抽象语法树
    编译成js代码执行。

实现步骤

  1. 实现中文代码解释器 生成ast语法树 (代码基于acorn.js第一个git log调整修改而来);
  2. 实现代码生成器 将ast语法树树编译成代码;
  3. 实现代码编辑器 通过monaco自定义中文高亮规则实现;
  4. 实现抽象语法树,控制台 展示当前抽象语法,及提供打印输出
  5. 整合如上前面的内容

实现功能

  1. 目前实现了 赋值,表达式,逻辑判断,函数,循环 等相关语法
  2. 提供 打印,定时器 两个上下文供测试使用
  3. 在代码编辑窗口添加代码后,点击执行。右侧抽象语法树和控制台即会生成出对于内容

总结

  1. 该项目的主要目的是将对编译原理的学习不停留在理论上,通过在已有的开源项目的基础上的实践,加深编译相关理解
  2. 在学习的基础上做一些发散,后续会新增一些其他的上下文实现一些有意思的东西。比如,在node环境下添加上下文执行,添加一些界面的上下文通过中文去操作。另外目前的中文语法主要因为主要是来自于acorn.js,可以看作js的汉化,后续可以自定义一些更符号中文语义的语法。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,135评论 1 32
  • 三天狂风暴雨般的发泄后,憔悴的小刘坐在台阶上吸着烟,开始想怎么去做这个事。有两种方案: 1:选一门现成的编程语言,...
    懵逼的码畜阅读 11,509评论 5 13
  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 9,281评论 0 3
  • 晨起上班路上,接过来链家小哥发的一张传单,上面有我无法关注的房价。 相信很多年轻人都会有这样的困惑,究竟是去北上广...
    梅雪心语阅读 742评论 1 4
  • 晨,旭日东升,暖暖的阳光普照滨海新区。七点刚过,海昌路和新园路沿线就停满各式各样大车小车,参加平阳县新时代文明实践...
    平阳县体育总会春哥阅读 1,307评论 0 11