/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
其实也可以用 iterator input,但着实是没好的 Pattern 去支持即时更新的 iterator
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 现在的 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>>直接从输入到 Any 值、直接从 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))
/tmp/duangsuse.sock
真的已经分不清框架的核心和外设了…… 都写在一个文件里 没有规矩
现在 ParserKt 也的确是越来越乱了…… 一些基本模型的实现,也被我质疑是 不够简洁 也能被查出 bug 了么……
看来 严格的工程规范 是必须了
可是我没有硬件条件,用不起 Gradle,而且自动化测试困难
看来 严格的工程规范 是必须了
可是我没有硬件条件,用不起 Gradle,而且自动化测试困难
{'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 POLICR · 更新通知
#安全警告 最近出现了一些极其严重的炸群现象,短时间内成百上千的 spammer 涌入到一个群中。
建议暂时关闭普通群成员的拉人(Add Users)功能。特别是一些经常受骚扰的群。注意,如果是公开群,不要轻易转为私有群,username 可能会被抢注。
建议暂时关闭普通群成员的拉人(Add Users)功能。特别是一些经常受骚扰的群。注意,如果是公开群,不要轻易转为私有群,username 可能会被抢注。
Forwarded from X