
是一族哦,不是一门。 开始是想把语言搞出来,后来发现这太难,于是 先写 spec。 放在 gitbook 上没人看,就扔着了。 示例一下:
@qz @mode @lazy print string Input a string readint print @string output ~ fib last func fib do return 1 on arg 1 = 1 or arg 1 = 2 return selfcall with arg 1 - 1 indeed + selfcall with arg 1 + 2 indeed end fib 啊,过这么多年,我都忘记了。 记得起来的: 自顶而下的解析方式。不用 BNF。
关键字都是用 @ 打头, 其他语言能编译成 用 @ 打头 的核心语言。 一条语句以 @关键字开始,带不定数目个 @ 打头的子关键字,子关键字又能带子关键字。
你可以用 @@ 强制开新行。
示例代码不用 @ 打头,是因为 @qz @mode @lazy, 懒惰方式的原因,目的是如果 @ 打头能解释通,那么就是 @ 打头的次。 只有这两个是非 @ 打头的: print fib @string Input a string 等价于 "Input a string" ~ 是字符串连接 , 顺便, 字符串是一直没想好的部分。
~ fib last last 这个关键词是等于上一句的执行结果。 fib 是个函数 return on 等价于 on xxx return;
selfcall with arg 1 - 1 indeed + selfcall with arg 1 + 2 indeed selfcall 等价于 自身函数
with X 等价于 X, indeed 结束 with
fib(arg(1)-1) + fib(arg(1)+2) == 哈哈,后一个我写成 +2 了,这个 bug 一直没发现。
后面有个长一点的:
@qz @mode standard # 使用 standard 模式 @import stdlib # 引入标准库, readInt 在里面 # 定义一个函数 # 你可以注意到 func 这个开头词. # 所有修饰词都用 @ 打头 #@func 用于定义一个函数 一般条件下可以省略 # 后面的 @都是 @func 的修饰词 @func @as int # 这里 表示 fib 这个函数返回 int 类型 @name Fib # 这个函数名为 Fib @args # 参数列表,这个修饰词有自己的子句 @with @deafult @as int @comment ”@default 代替了 @arg XX ” #后面的 @as int 修饰 @default . @endargs @comment 兔子数列 @do # @do 里面是语句块. @return 1 @on ( (@arg 1 @equals 1) or (@arg 1 @equals 2)); # return on 是 qz 语言常用的返回判断. # @arg:1 调用的第一个参数 # 和常见的 equals 是 == 的宏不同. == 才是 @equals 的 @return @sellcall(arg:1-1)+@selfcall(arg:1+2); @end func @end 是可带参数的用于检查配对 @main #main 是单独关键词 @do #显示 @call print @args @string Input a string @endargs #输入 @call readInt @setto t #判断 @if t @lt 0 @then @do @call print @string Minus! @return -2 @end @else @do @end #分支判断 @switch t @do @on 1 @do @pass @end @on 2 @do @end @default @do @end @end # 循环 # 异常 @try @do @call exception @deal throwOn @args @with conditions @values t @gt 10 @with @stringstart Too Big! @stringend @with -1 @endargs @end @catch @do # @end; @call print @string output: @concat @call fib @with t @return 0 @end main @qz 语言讨厌符号。
@func @name foo @return @as @auto 返回类型 @comment #这里是注释子句 @args @arg x @as int @default 0 @byval # 默认值为 0 传值模式 @arg y @default 20 @as @any @comment ” just do it ” # 注释也是代码结构 @endargs @dynmicargs # 动态参数 @staticargs # 固定参数 @multiReturn #多个 返回值 @independ # 该函数不调用项目里其他函数 @nolib # 该函数甚至连库函数都没调用 @nostatic # 该函数内部没有静态变量 @noglobal # 没有用到上级变量. @haddeclare # 外部有声明, @forsupport # 表示支持性函数 @for # 所在 @inline @stdcall # 使用 stdcall 模式 @fasecall # 使用 fastcall 模式 # 其他扩展会继续有的 @do # 其他语句放这里 @end # end 是 do 的子句 @func foo2 @as @int @do # 代码开始 @end 1 HongJay 2019-05-09 18:49:01 +08:00 其实这也没人看。 |
2 Northxw 2019-05-09 18:53:13 +08:00 我来安慰下楼主 |
4 imningfeng 2019-05-09 18:57:06 +08:00 @@@ |
5 miaomiao888 2019-05-09 19:00:37 +08:00 妈鸭,看的我满眼冒 @_@ |
6 janxin 2019-05-09 19:02:37 +08:00 想到了 PHP 的$ |
7 JsonSnowNothing 2019-05-09 19:02:45 +08:00 via Android 我晕了 |
8 whp1473 2019-05-09 19:15:37 +08:00 好晕 |
10 6IbA2bj5ip3tK49j 2019-05-09 19:46:38 +08:00 via iPhone 建议替换成$ 每一行都从钱开始 你钱多可以牛逼一点,单独一行。 |
11 cpdyj0 2019-05-09 19:48:37 +08:00 感觉自己的两只眼也变成 @@了,,这要是变成¥¥或者$$多好啊 |
12 nguoidiqua 2019-05-09 20:02:49 +08:00 知道为什么我不太喜欢 PHP 吗 |
15 justyy 2019-05-09 20:46:29 +08:00 hahahahaha 6666 |
16 shintendo 2019-05-09 21:41:06 +08:00 那真是 PHP 里写 jQuery 全是钱啊 |
17 largecat 2019-05-09 22:27:30 +08:00 via Android 满城尽带黄金甲(@) 支持, |
18 dvaknheo OP PHP 是变量的带 $ ,我是关键字带 @ ,之前没想到加,后来有天发现关键字带符号,可以形成 0 关键字的效果。 为什么用 @ 不用 $ ,是可能 php 已经把 $ 用做变量名了吧 用 # 注释,是因为想用一个符号做注释。 @ comment 不过,还有这样的注释 不过 @ qz @ mode lazy 模式 就把 @ 统统省掉了嘛。 |
19 swordfeng 2019-05-10 07:08:00 +08:00 重新发明 AST |