duangsuse::Echo
723 subscribers
4.28K photos
130 videos
583 files
6.5K links
import this:
美而不丑、明而不暗、短而不凡、长而不乱,扁平不宽,读而后码,行之天下,勿托地上天国。
异常勿吞,难过勿过,叹一真理。效率是很重要,盲目最是低效。
简明是可靠的先验,不是可靠的祭品。
知其变,守其恒,为天下式;穷其变,知不穷,得地上势。知变守恒却穷变知新,我认真理,我不认真。

技术相干订阅~
另外有 throws 闲杂频道 @dsuset
转载频道 @dsusep
极小可能会有批评zf的消息 如有不适可退出
suse小站(面向运气编程): https://WOJS.org/#/
Download Telegram
Forwarded from Fly 的小频道
Forwarded from Fly 的小频道
去年的和今年的(
duangsuse::Echo
lime.zip
写了一点 Lexer 和 LexerTests
以后日常发布,目标是和 Lice 比 Benchmark
(当然啦肯定是比不过的,但这个也很好玩而已
Kotlin #rich 专享我垃圾电脑深感无力
BigIneger 是个好东西(虽然会降低解析器性能)
写了 ParserTests,还有一个测试不能过,急,在线等
This media is not supported in your browser
VIEW IN TELEGRAM
duangsuse::Echo
lime-parser.zip
#PL #project 完整 Lime parser 完成,带了 tests 和 javadoc
现在不包含 Kotlin std 在内的体积 27k
准确的说应该叫 KtLime,拿 Java 重写很简单的
Kotlin 有尾递归比较方便使用,而且总体性能比 Java 强
## 基本数据类型

+ nil ()
+ bool #t #f
+ number 01 0x1 0b1001 0o122 2323N 32323D 2233.223F 66666L 6B
+ list (a b c)
+ string '' "" "\"" "\n"

### 行注释

; comment

任何不可识别的都作为标识符

p.s. 冰封波博客上那个字符串 escape 失败不报错作为标识符的真是奇妙

## 展开规则:

+ 对任何宏:检查参数列表长度,对所有参数 s-expression 列表递归展开并对标识符解引用,然后填充宏参数递归展开,如果是 varargs 宏就直接将求值后的列表填充到 varargs 参数里
+ 对 ^* 宏:检查参数列表长度,然后填充宏参数递归展开,如果是 varargs 宏就直接将求值后的列表填充到 varargs 参数里
+ 对 . 宏:检查对应 send handler 参数列表长度,将所有参数 s-expression 列表递归展开并对标识符解引用,发送调用到处理 handler

## 插件:

0. 提供 ext ext~ macro 和 onLoad(Llime/Lime)V`、`onUnload(Llime/Lime)V`,插件类统一叫 `LimePlugin
1. 取值 hook
2. 找不到变量 procedure
3. SEND handler
4. 错误 hook

## 作用域:

全局变量 args 在每次递归展开时有效,它是惰性求值的

全局变量 __stack 储存了所有作用域表
不过它是惰性求值的

Lime 使用嵌套作用域

全局变量 __env 表示整个 Lime 全局表

__lime 表示解释器对象