/tmp/duangsuse.sock
23 subscribers
303 photos
3 videos
92 files
337 links
从 duangsuse::Echo (@dsuse) 跟进出来的分支,将在作者恢复原帐号访问的时候合并删除。
Download Telegram
/tmp/duangsuse.sock
https://tomassetti.me/parsing-in-javascript/#chevrotain sealed class Token { data class NamedConst(val name: String): Token() } fun KeywordPattern<Token>.mergeConsts(vararg names: String) = names.forEach { this[it] = Token.NamedConst(it) } val namedConsts…
ParserKt 是 scannerless parsing 框架,目前对这样传统的 lexer-parser 结构 支持还不完善……

其实也可以用 iterator input,但着实是没好的 Pattern 去支持即时更新的 iterator
This media is not supported in your browser
VIEW IN TELEGRAM
我去专门独立于 Repeat pattern,写一个这种输入吧。
我把这个“封建余孽”加回来了…… 难道就是为了显示 ParserKt 很有灵活性么
class BoolScanner(feed: Feed<Char>): LexerFeed<Int>(feed) {
override fun tokenizer() = KeywordPattern<Int>().apply { mergeStrings("true" to 1, "false" to 0) }
override val eof = -1
}
这么说来,其实在这无聊的时候试着让 ParserKt 能在简洁性上吊打其他的框架,才是最有意思的事情吧……
This media is not supported in your browser
VIEW IN TELEGRAM
真的已经分不清框架的核心和外设了…… 都写在一个文件里 没有规矩
说实在话,其实 ParserKt 现在的 Pattern 架构处理 leftrec 文法也没问题,我早想过了,只需要弄个 LrDecide 和 leftrec {},靠异常系统就可以工作
http://canopy.jcoglan.com/
grammar Maps
map <- "{" string ":" value "}" %make_map
string <- "'" [^']* "'" %make_string
value <- list / number
list <- "[" value ("," value)* "]" %make_list
number <- [0-9]+ %make_number

lateinit var list: Pattern<Char, List<Any>>
val comma = item(',').tokenize()
val number = Repeat(asInt(), digitFor('0'..'9'))
val string = SurroundBy(quotes.clamly(), stringFor(!item('\'')))
val value = Decide(number, Deferred{list}).mergeFirst { if (it is List<*>) 1 else 0 }.also {
list = SurroundBy(squares.clamly(), JoinBy(comma, it) )
}
val kvPart = Seq(::AnyTuple, string, item(':'), value)
val kv = Convert(kvPart, { it[0] to it[1] }, { anyTupleOf(first, ':', second) })
val map = SurroundBy(braces.clamly(), JoinBy(comma, kv))

直接从输入到 Any 值、直接从 Any 值弄回输入,类型全贴上。
Forwarded from 憨憨的碎碎念 | #春节限定跑路 (wuhang2003)
一本英语书的神预测
/tmp/duangsuse.sock
真的已经分不清框架的核心和外设了…… 都写在一个文件里 没有规矩
现在 ParserKt 也的确是越来越乱了…… 一些基本模型的实现,也被我质疑是 不够简洁 也能被查出 bug 了么……

看来 严格的工程规范 是必须了
可是我没有硬件条件,用不起 Gradle,而且自动化测试困难
21 行。从规则到 kotlin.Any,再 rebuild 回来。
[duangsuse@susepc pkt_9]$ kotlin MapSyntax
{'das':[1,2, 3,4], 'kas':444}
{das=[1, 2, 3, 4], kas=444}
{'das': [1, 2, 3, 4], 'kas': 444}
{'hello': [1,2,3, 4, 5,6], 'wor' 
{
Exception in thread "main" ParseError: <stdin>:2:0: expecting item for last seprator

{'fff':[1,2,3}
Exception in thread "main" ParseError: <stdin>:1:13: expecting `']'' (from <stdin>:1:8)

{'emm': 2333
Exception in thread "main" ParseError: <stdin>:2:0: expecting `'}'' (from <stdin>:1:1)

而且带完整的错误提示,而且还支持容错解析(就是上文的 clamly)
Forwarded from Justf News (Justf | 盲人)
Forwarded from POLICR · 更新通知
#安全警告 最近出现了一些极其严重的炸群现象,短时间内成百上千的 spammer 涌入到一个群中。

建议暂时关闭普通群成员的拉人(Add Users)功能。特别是一些经常受骚扰的群。注意,如果是公开群,不要轻易转为私有群,username 可能会被抢注。
吊打其他解析器框架实在是太爽了
什么左递归,算法大佬,可是写出来的定义能如 ParserKt 一样好看高性能吗?
补充一下,有人把石狮子的…… 给 宫刑 了