目录java
友情提示,可跳过本篇直接看(一)python
相信做为IT工做者,都会有“实现一个本身的编程语言”的想法吧?c++
我也有这样的想法。git
在一个无聊的下午突发奇想,要是能有一种编程语言,它可以重载运算符,学习成本低,语法简洁,最好能模拟各类dsl,敲击键盘次数少,编译到jvm字节码而且可以完美的与java互通该多好github
当时以为scala语法太过复杂(虽然不难可是容易出错),groovy的运算符重载有限,kotlin不错,但他的运算符绑定规则甚至不能用在BigInteger上,不免产生一些重复类库。算法
因此,在搞定了手上正在作的项目后,开始了编译器之旅。编程
先上一个视频,看看Latte
长什么样 戳我swift
这是一个语法高亮的截图
闭包
这是它的Maven坐标,若是你想把Latte看成脚本,用这个会很是方便jvm
<dependency> <groupId>org.latte-lang</groupId> <artifactId>latte-lang</artifactId> <version>LATEST</version> </dependency>
这个系列讲述了我在开发Latte
语言的一系列历程。重点并不在编译原理和算法,可是包括了某些关键的工程实现思路。若是是想学习编译原理,建议看一些理论书籍。若是是想写一个编译器,相信这系列文章会派上用场。
顺便github 求watch求star~嘿嘿~
##取名
就算普通项目也得有个名字,编译器可不是小工程,天然须要一个代号。 我一开始取名为LessTyping,意为“更少的打字”,理解为“少那么一点类型”也能够,毕竟它是静态动态类型混合的。(groovy也是,对于规定类型的地方和java字节码并没有差异,对于没有规定的就是反射取各类值)。发布时感受这个名字太长,音节也太多,周围朋友也表示不像编程语言的名字。这个语言能够内嵌在java中,也能够与java无缝结合,语言特性也与java一致。因此更名为Latte,拿铁+咖啡。
##设计
第二步是语言的设计。先得有个概念,它大概长什么样
既然要少敲字符,并且可读性还不能低,那么“结束符”统统去掉(不是文法的结束符,只是一般意义的结束语句用的符号),仅仅为了编译方便的辅助字符统统去掉
最后光秃秃的,怎么知道块结构呢?怎么消除歧义呢?因而我借鉴了python的强制缩进。
既然要可读,那么还得遵守主流编程语言留下的“约定”。因而乎
这些是最终定下的比较有趣的特性,那些和java重复的没写在这儿。
有的在设计之初定下的特性本来想作后来以为没用或者看起来过于丑陋便放弃了,有的是后来修改的,有的特性是开发时突发奇想加上去的。
整个过程就是迷茫,思考和喜悦的交织。不管是知识仍是阅历都收获了不少。最终,历时3个多月 (彷佛有点慢啊:( 总算是作出了第一个ALPHA版本,完成了全部计划之初的设计,外加一个语法高亮和一个简易的IDE。
从从零开始开发jvm语言(一)
开始,我将会把这个语言的实现思路和过程分享给你们,同时也推广一下个人编译器项目Latte,但愿多多支持哦~