/tmp/duangsuse.sock
ParserKt 坚守节操,不修改 Feed 的基本定义,LL(1) 的问题完全可以利用 contextual 解析器,去区分……
ParserKt 针对 greedy trie pattern 根本没办法修复,因为它的 Feed 模型相当严格,一旦出现 peek = sticky end 的问题,非常难以解决——要判断是不是,必须 consume,consume 完若不是则一定会导致此字符已被消耗无法再用。
也不是不能利用扩展 Pattern 解决,确实是可以添加一个上下文,要求顺序解析 p1 p2 其中之一不为 notParsed,可那毕竟不是个容易复用的办法……
也不是不能利用扩展 Pattern 解决,确实是可以添加一个上下文,要求顺序解析 p1 p2 其中之一不为 notParsed,可那毕竟不是个容易复用的办法……
/tmp/duangsuse.sock
ParserKt 针对 greedy trie pattern 根本没办法修复,因为它的 Feed 模型相当严格,一旦出现 peek = sticky end 的问题,非常难以解决——要判断是不是,必须 consume,consume 完若不是则一定会导致此字符已被消耗无法再用。 也不是不能利用扩展 Pattern 解决,确实是可以添加一个上下文,要求顺序解析 p1 p2 其中之一不为 notParsed,可那毕竟不是个容易复用的办法……
在 ParserKt 里,读取字符串非常简单,只需要 lookahead-1
val digit = digitFor('0'..'9')
val hex = Decide(digit, digitFor('A'..'Z', 'A', 10), digitFor('a'..'z', 'a', 10)).mergeFirst { if (it in 0..9) 0 else 1 }
val escapes = mapOf('"' to '"', 't' to '\t', 'b' to '\b', 'n' to '\n', 'r' to '\r', '\\' to '\\')
val namedEscape = MapPattern(escapes) { error("unknown escape '$it'"); '?' }
val unicodeEscapePart = object: Repeat<Char, Int, Int>(asInt(16), hex) {
override val bounds = 4..4
override val greedy = false
override fun unfold(value: Int) = value.toString(16).padStart(4, '0').map { hex.read(SingleFeed(it))!! } }
}
val unicodeEscape = Convert(unicodeEscapePart, Int::toChar, Char::toInt).clamWhile(hex, '?') {"bad unicode escape"}
val escaped = Decide(namedEscape, unicodeEscape).mergeFirst { if (it in escapes.values) 0 else 1 } prefix item('\\')
/tmp/duangsuse.sock
https://github.com/duangsuse-valid-projects/Share/blob/master/Others/kt_misc/pkt_9/String.kt#L17 ParserKt 总算稳当了些…… 🥳
fun KeywordPattern<String>.greedy() = Piped(this) { it ?: //FIXME is not possible
try { takeWhile { it !in this@greedy.routes }.joinToString("").takeIf(String::isNotEmpty) }
catch (_: Feed.End) { notParsed }
} 我还是不能容忍一个无法实际实现,有 bug 的 pattern 存在于 ParserKt 里。
Forwarded from Yuuta 🎀 | clrd enroute
Telegram
老王无聊抽风发的
Forwarded from Deleted Account
我不喜欢除以的表示方法,就是一个名字,除号的简写。
一百除一是”一百去除一“ 1.div(100)、1 / 100
一百除以一是 100.divBy(1)
这我知道
一百除一是”一百去除一“ 1.div(100)、1 / 100
一百除以一是 100.divBy(1)
这我知道
Forwarded from Deleted Account
我和数学有仇,我记不住数字而且也讨厌什么”蕴含“”可知“”易证“”平凡“那一套数学专属的逻辑表达,代码在这里,你去加?
GitHub
duangsuse-valid-projects/Share
🐕 duangsuse's shared files(e.g. productive software projects, documents) - duangsuse-valid-projects/Share
Forwarded from Justf News (Justf | 瞎子)
/tmp/duangsuse.sock
lg.add('LBRACE', '{\\r*\\n*', flags=(re.DOTALL)) lg.add('RBRACE', '\\r*\\n*}', flags=(re.DOTALL)) 代码质量奇差、异想天开 空格语法结构分不清,也不知道是简单了还是困难了,还是本来很 low 却很难伺候。
https://github.com/daorys1/mulan/blob/master/ulang/codegen/ulgen.py#L387
不错,还真是研究员的风格。叫 chr 的 变量就会变成叫 char 的。
不错,还真是研究员的风格。叫 chr 的 变量就会变成叫 char 的。
GitHub
daorys1/mulan
[UNOFFICIAL] re-implementation of mulan(also known as muLang) - daorys1/mulan
为什么有很多人执着于中文编程? - invalid s的回答 - 知乎 #zhihu #PLT
https://www.zhihu.com/question/355223335/answer/947391737
https://www.zhihu.com/question/355223335/answer/947391737
Zhihu
为什么有很多人执着于中文编程? - 知乎
嗯,很有趣的图表。这个问题,前两天每天两万浏览。但它显然伤害了一些人的利益。于是两天后,它的浏览量…
/tmp/duangsuse.sock
为什么有很多人执着于中文编程? - invalid s的回答 - 知乎 #zhihu #PLT https://www.zhihu.com/question/355223335/answer/947391737
看了这篇,压死骆驼的最后一根稻草,我觉得那些不能落地的,都不算是做得实事。
中文编程曾经是笑话,我将让它不再是笑话。
中文编程曾经是笑话,我将让它不再是笑话。
我简单看了一下 ulang 的实现,ParserKt 所实现的第一门语言 可能就是它了
+ runtime/env 运行时利用库
+ runtime/main, runtime/repl 实现功能入口
顺便说一句,ParserKt 是正经的 LL(1) 流递归下降解析器,什么 match bracket 的 REPL 对我们简直是小儿科,何须用什么 is_close?
词法处理我之前已经做了,没做完。(PKT 的 one-pass LL(1) 处理 C 风格注释是太困难了)
+ codegen 语义、代码生成(Python AST 转化)
+ runtime/env 运行时利用库
+ runtime/main, runtime/repl 实现功能入口
顺便说一句,ParserKt 是正经的 LL(1) 流递归下降解析器,什么 match bracket 的 REPL 对我们简直是小儿科,何须用什么 is_close?
val entries = JoinBy(item(';'), stringFor(!elementIn(';', '}')) ).mergeConstantJoin()
val brk = SurroundBy(item('{') to item('}').clam {"unclosed {"}, entries)
val white = elementIn(' ', '\t') named "white"
val ws = stringFor(white).toConstant("")
val wsNL = stringFor(newlineChar or white named "ws").toConstant("")
val repl = JoinBy(newlineChar, SurroundBy(wsNL to ws, brk)).OnItem { println(it) }.mergeConstantJoin('\n')
+ parser 语法词法处理我之前已经做了,没做完。(PKT 的 one-pass LL(1) 处理 C 风格注释是太困难了)
+ codegen 语义、代码生成(Python AST 转化)
GitHub
mulan/ulang/runtime/env.py at master · daorys1/mulan
[UNOFFICIAL] re-implementation of mulan(also known as muLang) - daorys1/mulan
Forwarded from /tmp/duangsuse.sock
看了这篇,压死骆驼的最后一根稻草,我觉得那些不能落地的,都不算是做得实事。
中文编程曾经是笑话,我将让它不再是笑话。
中文编程曾经是笑话,我将让它不再是笑话。