Lite语言——从入门到放弃(一)

kulics · · 1016 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

Lite 是我设计开发的一门编程语言,主要关注如何设计更简洁的语法,经过两年改进,现在只需要很少的代码量就可以表达现代编程语言的大部分逻辑,去掉了关键字设计。

目前仍在持续改进中,欢迎到 Github 提意见,走过路过别忘了点个 Star 。

github.com/kulics/lite

变量声明

在 Lite 中,变量声明的格式为

# id type #
a int

是的,不需要关键字开头,只需要用空格分割,后面部分就是类型。

也不需要 ; 结尾,编译器会根据特定换行规则断句,除非想在一行内写多个语句,就可以加上 ;

Lite 是一门强类型语言,大部分时候都需要明确的类型,但是有丰富的自动推导特性节省代码。

赋值

一句话带过。

# id = value #
a = 0

声明时初始化

把前面两个连起来就可以了。

# id type = value #
a int = 0

Lite 具有自动推导特性,所以类型可以省略,然后就和赋值语句一样了。
编译器会分析是否存在变量,如果变量不存在就会自动声明。

a = 0  # 创建变量 #
a = 1  # 赋值 #

注释

Lite 使用 # 来表示注释,用前后两个包住内容即可。

#
注释
注释
注释
#

基础类型

快速带过

a int = 100000000            # i8 = sbyte,i16 = short,int = i32 = int,i64 = long #
b num = 3.141592653          # f32 = float,num = f64 = double #
c bool = true                # bool = bool #
d str = "hello"              # str = string #
e any = 0                    # any = object #

字符串插值

可能在其它语言里我们经常会图方便使用 + 拼接字符串。

var txt = "hello" + integer.ToString() + "world!";

现代语言会提供特殊的插值语法加糖。

var txt = "hello $integer world!";

Lite 更直接一些,省略掉 + 就可以达到插值效果,前后被字符串包围的值会被自动插值。

txt = "hello" integer "world!"

基本操作符

快速带过

a = 4
b = 2
c = a + b      # 加 #
c = a - b      # 减 #
c = a * b      # 乘 #
c = a / b      # 除 #
c = a % b      # 取余 #
c = a ** b     # 幂 #
c = a // b     # 根 #
c = a %% b     # 对数 #

d = false
d = a == b   # 等于 #
d = a >< b   # 不等于 #
d = a > b    # 大于 #
d = a >= b   # 大于等于 #
d = a < b    # 小于 #
d = a <= b   # 小于等于 #

d = true & false     # 逻辑与 #
d = true | false     # 逻辑或 #
d = ~true            # 逻辑非 #

基本集合类型

数组类型表示为 []type ,用 []type{ value, value, value...} 包裹元素初始化。

a []int = []int{1,2,3,4,5}

一般情况下可以自动推导类型,使用 {value,value,value...} 直接初始化即可。

a = {1,2,3,4,5}

字典类型表示为 [type]type,用 [type]type{ [value]value, [value]value, [value]value...} 包裹元素初始化。

b [str]int = [str]int{ ["1"]1, ["2"]2, ["3"]3 }

一样可以使用自动推导类型。

b = { ["1"]1, ["2"]2, ["3"]3 }

使用索引语法 id[value] 即可取得某个索引对应元素的值。

v = a[0]     # 数组索引从 0 开始 #
v = b["3"]   

选择结构

Lite 的选择结构很简单,不需要使用 if,else,elif,switch,select,case,default,break这些关键字。

只需要用 ? 和指定的位置规则就可以进行多种操作。

纯分支结构用来对单纯的条件进行匹配,只会进入条件成立的分支 (if else)

a = 1
? a == 1 {
    # 执行逻辑 #
} a == 2 {
    # 执行逻辑 #
} _ {
    # 当上面条件都不满足时执行逻辑 #
}
? true {
    # 执行逻辑 #
}

值匹配结构用来对某个值进行多条件匹配,只会进入条件成立的分支 (switch)

a = 1
a ? 1 {
    # 执行逻辑 #
} 2,3,4 {
    # 合并多个条件执行逻辑 #
} _ {
    # 当上面条件都不满足时执行逻辑 #
}

循环结构

Lite 的循环结构很简单,不需要使用 for,foreach,while,loop,in,of,range 这些关键字。
只需要用 @ 和指定的位置规则就可以进行多种操作。
集合循环用来对集合进行遍历 (foreach)

a = 0
arr = { 1,2,3,4,5 }
id @ arr {    # 取出单个元素,定义为变量 id #
     a += id
}

如果需要同时取出元素的索引和值,可以使用 [id]id 语法。

[index]value @ arr {
    # 执行逻辑 #
}

计数循环用来对指定数字集合进行遍历,比如从0数到100(for)

计数需要引入特殊的范围表示语法 [start < end, step],step为步长,可以省略,默认为1。中间的操作符可以指定 >,>=,<,<=四种,分别表示 降序,降序到达最后一位,升序,升序到达最后一位。

a = 0
i @ [0 < 100] {  # 0 到 99 #
    a += i
}
i @ [0 <= 100] {  # 0 到 100 #
    a += i
}
i @ [100 > 0, 2] {  # 100 到 1,步长为 2 #
    a -= i
}

条件循环,满足条件时进行继续循环 (loop)

@ a > b {
    # 执行逻辑 #
}
无限循环,很简单,只用 `@` 就可以了 (while)
@ {
    # 执行逻辑 #
}

结尾

以上是 Lite 最基础的语法结构,对比起其它语言的语法是否更简洁呢?

下一次我们会来看看如何用简洁的语法表达函数和数据结构。


有疑问加站长微信联系(非本文作者)

本文来自:Segmentfault

感谢作者:kulics

查看原文:Lite语言——从入门到放弃(一)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1016 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传