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

技术相干订阅~
另外有 throws 闲杂频道 @dsuset
转载频道 @dsusep
极小可能会有批评zf的消息 如有不适可退出
suse小站(面向运气编程): https://WOJS.org/#/
Download Telegram
http://sassy.sourceforge.net/

可以作为 Kasm 的参考... 不过看到说是占 Larceny 代码大部分我知道大概... 很难
This media is not supported in your browser
VIEW IN TELEGRAM
其实是我弄错了... 我想要类似 Petit Larceny 这样编译到 C 的,或者说可以脱离专门的运行时的实现
( 但我没有注意到这实际上是不可能的,除非是用 C, D, Fortran, no_std 的 Rust 之类

但挂上运行时其实也可以,因为运行时有 400k 大小

不过还是失望...
duangsuse::Echo
http://sassy.sourceforge.net/ 可以作为 Kasm 的参考... 不过看到说是占 Larceny 代码大部分我知道大概... 很难
曾经也写过 compose 函数,duangsuse 自豪的表示(大嘘)
当然啦,由于技术太菜,这是黑历史... 不仅概念错误还白白使得灵活无比的 JavaScript 变得如此死板
https://popf.rip/ (因为域名暂时没有地方用,据说很多搜索引擎根本不爬 rip/* ... 气死

// 用来创建混合函数的高阶函数
// @arg func: 被内联的函数
// @arg chain_fun: 目标函数
// @return 生成的混合函数闭包
function mixture(func, chain_fun) {
return function (arg1) {
return func(chain_fun(arg1))
}
}
// Curry for mixture
function mk_mixture(chain_fun) {
return function (func) {
return mixture(func, chain_fun)
}
}

// 用来添加 JSON 解码功能的高阶函数
json_decode_chain = mk_mixture(JSON.parse)

// 这玩意是这么玩的
function ruser(id, fun) {
$$.ajax({
method: 'POST',
url: uq_api.replace('xxxx', id || ''),
success: json_decode_chain(fun)
});
}
duangsuse::Echo
先试用 lex / re2c 和 Yacc
就是 re2c 版本的 HanPP 和 Yacc 版本的 +-*/ 计算器
HanPP 是一个 C-like 语言预处理器可以将 C 标识符们预处理为标准 C 允许的 ^[A-Za-z_][A-Za-z0-9_]* 模式

但是,要无视掉这些而不能随意合法化处理

BlockComment: '/*' .*? '*/'
LineComment: '//' ~[\r\n]*
StringLiteral: EncodingPrefix? '"' SCharSequence? '"'
SimpleEscapeSequence: '\\' ['"?abfnrtv\\]
EncodingPrefix
: 'u8'
| 'u'
| 'U'
| 'L'
;


(随手抄的,但其实有差别,少了一个 ''
整理一下,需要忽略的有:

注释,直接 skip 掉,包含行注释和块注释
字符串文本,需要侦测的只有 \"
字符文本,需要侦测的只有 \'

就是说什么别的词法规则都不需要考虑,现在正在编写 Lex 代码...
duangsuse::Echo
https://t.me/dsuses/2484 Flex 找不到例子,而且少例子居然是错误的,无法编译通过,只得换 re2c,可能只有 JFlex 现在可以用
re2c 各种水土不服,体积还过得去但是使用起来非常不方便,会出一些问题... 还是 Lex 好啊
比如 YYLIMIT 不知为何无效,或者设计不知为何不能像我想的一样
总是段错误,然后不能单单靠 getchar() 完成分词
总结:很失败
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Yacc 的文档很难理解,我看 GitHub 上 Yacc 语言的代码,勉强弄明白是怎么回事了... 差点连 PG 基础终结符和非终结符都搞混
... 理想到现实还是有区别的

BNF 到 Yacc 还是有区别的