如何自创一门计算机语言
  1. 需要有基本的编译原理常识。构造基本的编译原理常识,一方面来自于对已有语言的使用经验,了解基本术语。比如用C,那么起码知道语言要素包括宏、表达式、语句、语句块、函数、指针等;还知道C语言有编译、链接和执行三个阶段。这些基本概念对宏观掌握学习进程是很有必要的。另外一方面编译原理的常识,要来自图书。比如龙书、SICP。在这一步,得知道大部分语言的处理都要分为词法、语法、语义和代码生成四个阶段。每个阶段,分别是做什么的。
  2. 了解具体的编译算法。了解到什么程度,取决于使用第三方工具,还是需要自己从字符开始处理。个人建议,乔姆斯基文法体系、(扩展)巴克斯范式(EBNF),正则表达式,和LL(1)的递归下降分析法是必须要掌握的。对LL(k),LR(k)要有概念。其中,四则运算表达式的分析是很好的练习。
  3. 对语法的感觉。初学者设计语言的难度有两点。第一,不知道什么样的语法/语义是需要的;第二,不知道设计的文法能否实现。如果练习过递归下降法,应该已经有了基本的感觉。这个时候可以试图实现熟悉的语言。一些常用语言的Grammar Rule都是可以查到的。虽然这些语法,特别是C++,可能是上下文相关的所以用书上的办法难以实现,但是可以实现它的一个子集。通过这样的练习,能对掌握的分析算法能完成什么样的工作就有了个大致的体验。
  4. 深入了解自己的领域,明确需求。是需要一个类似于自然语言的脚本,还是只是一个表达式。经过3阶段的训练已经有了独立撰写语法的能力。可以写一个基础版本的出来。
  5. 实现自己的语言,特别是词法和语法部分。这一步最好能Log出尽可能多的信息,例如词列表并打印出分析树。
  6. 当有了分析树后,就可以去做语义分析了。对于初学者而言,语言的规模要尽可能小,这样语言的解释和语义分析可以合为一体,不用担心哪个部分算是代码生成,哪个部分算是语义分析。所以这一步最好能把解释器也写出来。这一步的要求很简单,知道符号表是做什么的,学会归纳和推导类型,能正确的处理分支和循环语句(如果有的话)。
  7. 设计一门类似于ASM的VM语言,可以是堆栈机模型,也可以是寄存器机模型。撰写代码生成从语法树上生成这个VM语言出来。并写一个VM的执行器。这一步看起来无从下手,实际上只要肯写,不出一个礼拜就知道怎么做了。一开始这个VM语言可以只用做整数的加减乘除就行了,以后可以慢慢加其他比较重要的特性,比如运行栈啦、代码地址啦,跳转啦等等。另外,把LLVM作为目标也是不错的选择,起码指令的解释不用自己费工夫了,LLVM的手册读起来也很容易。那个Tutorial写的特别好。

至此,语言就初步建立完成了。但是因为一开始能力有限,所以设计出来的语言是磕磕巴巴的。这个时候可以选择:

  • 向某个现有的语言靠拢;
  • 自己去了解现有语言的机制并进行权衡。这个时候什么动态/静态类型,函数是first class,类和对象才是该考虑的问题。这个时候一定要多读、多用现有的语言。拜编译器经验所赐,会站在一个不同角度上来对待现有的语言;
  • 学习Functional Programming,这对设计更好用的文法、更快的编写和修改编译器都有莫大的帮助。例如可以使用Combinator在C++中以类似于DSL的方式配置语法;
  • 剩下的就是在Language领域无止尽的挖掘了。上下文相关的语法、语法糖的设计、运行时的辅助机制(例如async,await这些广义上的控制流语句),GC,类型推导和静态分析等等。;
  • 最后也是最重要的,充分理解需求,才能在诸多语言要素间做出取舍。

如何自创一门计算机语言相关推荐

  1. 如何学习一门计算机语言?

    很多人对学习一门计算机语言,感到很疑惑,学了很久,就是没有收获,也不知道是干什么的,这里我做一些自我见解的解说. 拿我为例,到了大学才真正接触电脑,学习的是Java相关专业,虽然专业是自己报考的,但直 ...

  2. 如何快速学习一门计算机语言

    一.4步掌握一门计算机语言 1.学习语言的语法,关键字,以及基本的库(基础阶段) 2.学习语言的第三方库和各个组件(OS,数据库,网络)之间的连用 补充:对其他语言知识的必要学习 3.学习语言用来应用 ...

  3. 如何谋杀一门计算机语言?

    昨天晚上在微博上看到别人写的一篇文章<如何谋杀一门计算机语言>,然后就把内容图片发到了微头条上,果不其然,真的不能讨论语言之间的好坏,以及使用各种编程语言的程序员之间的技能,更不能讨论哪门 ...

  4. 如何学习一门计算机语言(续)

    我这里写给的读者是真正想学习,而又不得其门而入的初学者们.这样的人有很多,在我周围我就常看到有很多人想学好一门语言,他们有些也很刻苦.但是,坚持一段时间却没有什么成效.这其实是方法的问题.我这里说几点 ...

  5. 如何学习一门计算机语言

    下面的内容是从网上搜集资料的整理: 计算机行业不不断的去学习,就会被淘汰,只能时刻提醒自己: 加紧学习.学习.再学习,做一个积极上进的人.只有不断保持并且提高自己对于公司的价值,我们的事业才会更上一层 ...

  6. 怎么开始学一门计算机语言有哪些,如何学习(自学)一门编程语言

    原标题:如何学习(自学)一门编程语言 在学习前,如果能把以下几个方面的问题弄清楚,就能够比较顺利和高效的学习,拿到你所想要的目标.而不是从坚持到放弃. 一.方向和目标 首先要确定为什么要学习计算机编程 ...

  7. 如何学习一门新的计算机语言

    1.引言 2.学习语言采取的方式 3.为什么采取这种方式 4.后续的准备调整 5.未完待续 1.引言 1.1 为什么要写这篇文章 首先,我想表达的是文章标题有些大了,这篇文章主要记录的是最近将要学习j ...

  8. python是一门什么课程-为什么一定要让孩子学会一门编程语言?

    原标题:为什么一定要让孩子学会一门编程语言? 人人都应该学习一门计算机语言,因为它将教会你如何思考.--乔布斯 对于为什么要让孩子学习编程,很多家长可能会说"其他孩子都在学编程,我们也不能落 ...

  9. 只考计算机知识吗,计算机二级只考一门吗?计算机二级考什么?

    计算机二级只考一门吗? 计算机二级只需要考一门.合格就可以获得国家二级计算机证. 基础知识和操作题是一起考的,国家二级计算机考试是无纸化考试. 另外,基础知识都是选择题,操作题包括主要的办公软件的操作 ...

最新文章

  1. Android建造者模式初探(Toast工具类的进一步封装)
  2. 使用IDEA创建maven父子工程项目
  3. 程序员谈敏捷开发团队里成员间的相互信任
  4. 在Android App中集成Google登录
  5. burpsuite破解版
  6. Javascript 正则表达式对象
  7. 分页输入框跳转 java_displaytag 分页-添加页码输入框跳转至指定页
  8. sublime报错信息乱码_解决Sublime Text 3在GBK编码下的中文乱码问题
  9. 谁说数据分析很难?看完这7大分析套路后,还学不会的来找我
  10. swagger文档配置
  11. Linux中的权限管理命令-chmod
  12. 驱动lx4f120h,头文件配置,没有完全吃透,望指点
  13. 文件上传—DiskFileItemFactory核心类
  14. JFreeChart的简单使用
  15. java扫描条形码的两种方式
  16. [转载]微软WMV9的标准化进程受阻
  17. 百度飞桨—— 车牌识别学习与修改
  18. 键盘 Fn 键 的锁定与解锁
  19. MySQL中删除重复数据只保留一条
  20. 基于Android4.0.3的各种工具信息整理(共130个)

热门文章

  1. CoreImage各种filter
  2. 运营技巧|APP如何提升用户粘性与用户留存率
  3. 微信小游戏登陆凭证校验出现{errcode:40029,errmsg:invalid code, hints: [ req_id: weh8ka0297hc58 ]}
  4. 有效发布促成高效软文营销 | 媒介启航
  5. C++功能模块2:mkdir()创建文件夹目录
  6. Oracle、Mysql数据库编程开发基本操作命令语法脚本_基础篇(入门级)
  7. hadoop 3.x 启动过程中 Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
  8. 苹果语音备忘录可以转文字吗?可以语音转文字的备忘录便签
  9. uniapp 即时通讯_uni-App 仿微信 App 即时通讯|vue+uniapp 聊天
  10. 怎么关闭win7计算机一键还原系统,Win7卸载一键还原功能后还会保留在开机启动菜单中怎么办...