自己写一个编译器:第一天:设计语法

// 请移步《从零开发一个JVM语言》系列。 // 由于这篇文章有人收藏就不删除了。。

写代码时常被null值困扰,一般来说不是什么问题,花些时间也就解决了。 最近实在忍不了,把自己代码里所有可能出现null值的地方全部用Optional代替了。结果比预想的好得多。 若返回某个类型,那么不看文档也能知道它不会为空。 若返回Optional,那么就不会忘记判空。 若方法为void,那么就说明无返回值。

然而这只是我自己的代码。若是能从语言层面限制null值,那么该多好。

于是突发奇想,自己写一个编译器,创建一门编程语言!

本帖为直播,也就是说,我现在仅有一个设想,等到实现估计得过很久。 。 首先是语言语法。 我决定借鉴java和python以及scala还有groovy外带c++的一些语法。当然,这是我第一次写编译器,会尽量的选择容易编译的语法。

借鉴python的4个空格缩进原则,这可以大大减少解析的难度 使用尽量少的字符。字段默认private,方法,类默认public。取消所有的字段、方法声明标志。返回值使用<代替常见的return。字段赋值自带类型推断。不过由于水平有限,也仅有此处和lambda使用类型推断。还有一开始的Optional简化,opt。

其他文法见下:

use java.util.Date

class HelloWorld[T](
    str:String
        get str.trim()
        set str.trim()
    t:T
        set
    n=0
        get
):SuperClass(str,n)
    date=Date()
        get,set
    opt num:int
        get
            num+1
        set
            num-1
    val str="a string"
        get

    @Override
    sayHello()
        System.out.println("hello world")

    getHello():String
        <"hello world"

    opt logic():String
        if true
            sayHello()
        else if no // true/yes or false/no
            System.out.println(getHello())
        else
            <getHello()

这是设计的第一版,以后还可能更改。

由于Optional在java8才提供,所以这个语言基于java8,所以命名为J8Script。英文8=eight,所以简称JES。

转载于:https://my.oschina.net/wkgcass/blog/614201

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值