duangsuse::Echo
还可以修改一下试试 import lime.* SexpressionList sexp = (SexpressionList) Lime.parse("(print 1 2 a (print 233 \"Hello, world\") 23232323 (print2 a))").get(0) Lime lime = new Lime(sexp) lime.defineMacro("print", "varargs", ". print varargs") lime.defineMacro("print2"…
想构造自己的宏世界只需要和上面那样写就可以了 ⭐️
从头开始实现一门语言的标准库,闷声发大财
从头开始实现一门语言的标准库,闷声发大财
现在的 API 要访问
我觉得大概有插件 + static field 或 __lime 两种方法吧,不过后者需要
lime expander context 可能比较麻烦,是我写漏了....我觉得大概有插件 + static field 或 __lime 两种方法吧,不过后者需要
initMetaProgrammingGlobals() 才能使用Lime 有哪些特色
轻量级熟悉语法只需要五分钟没有运行时,标准库可定制解释器是纯 Kotlin 实现,跨到所有 JVM 存在的平台和 JVM 语言有良好的互操作性支持动态元编程,比如 undef 动态解释性语言不需要编译,可以代替一些频繁改动的逻辑不支持全角括号,全角分号,全角引号,全角逗号等初学者易混淆的东西的解析做 DSL 挺好的没有保留字, if while 都是函数支持函数式编程(通过 defexpr )
吹牛:
Lime 元编程即使是现在半没有的情况也比 Lice 强
之前 Lime OO 设计的时候更强,你还能这么写
Lime 元编程即使是现在半没有的情况也比 Lice 强
之前 Lime OO 设计的时候更强,你还能这么写
(1 2 3 4) 而 1 会被自动查找 BigInteger::-># (或更大的, Object::-># )转换成 Macro,所以你又创建了一个新的数组语法之前说没有实际上实现的
而非要在
^ macro 设计实际上导致你不能这么写...(while (> 10 (<-> i 0))
(|> (print i)
(type i)
(-> i (+ 1 i))))
而非要在
while 前面加 ^ ... 但是我懒dse@susepc:~/AndroidStudioProjects/Lime/out/artifacts/Lime_jar$ java -jar Lime.jar
100 0xFF 0b1010 011 true false null () 233N "字符串"
Lexing...
1:3 = 100
1:8 = 0xFF
1:15 = 0b1010
1:19 = 011
1:24 = true
1:30 = false
1:35 = null
1:37 = ()
1:40 = 2
1:45 = "字符串"
Parsing...
🌚 我真没抄 Lice 的词法... 不过区别也简直差不多只有 Lime 词法更严格(Number 必须以 delimiter 结尾)和不支持全角标点了