Forwarded from dnaugsuz
构造
看来整个都没有用了,毕竟是递归结构……
我根本不清楚到底要写什么…… 一开始就给整的 generator,我都忘了本来是
Call(callee, param) 的时候突然发现自己扫 callee 的时候没存。看来整个都没有用了,毕竟是递归结构……
我根本不清楚到底要写什么…… 一开始就给整的 generator,我都忘了本来是
# Expr = name '(' Expr {',' Expr}? ')' | name | digits
# predefined names: True, False, Nonecall_syntax.py
3.2 KB
In [4]: parse(tokenize("dsds(True,False,None,dss(232))"))
Out[4]: Call('dsds', [Const(True), Const('False'), Const('None'), Call('dss', [Const(232)])])
又不是不能用(暴论Forwarded from dnaugsuz
就因为 Iterator 没打算写 lookahead (因为我把这个当 feature,认真的)
然后这里又没有 ParserKt 的 contextual,就顺手用了 exception 来处理需要 lookahead 的 Name / Call…… 正常返回是 name、abnormal termination 是读到 ',' 了
结果就把
我就顺手给
但是还是可以用,我就 ***了
大概就是想把 lookahead 变成在栈上 "lookbehind",结果失败了草(name 的后面一个 token 肯定是 '(' 或 ',' ,但应该取决于是不是在括号内才对啊……)
ParserKt 可以处理这种文法,不过是通过
完全不支持 lookahead 真的可行吗……其实支持也不需要花多大力气
然后这里又没有 ParserKt 的 contextual,就顺手用了 exception 来处理需要 lookahead 的 Name / Call…… 正常返回是 name、abnormal termination 是读到 ',' 了
结果就把
Expr {',' Expr} 写出了这种清奇的画风,又因为 toplevel() 也可能读到闭括号(我没做好读取数据处理域控制)我就顺手给
toplevel() 加了个逻辑……但是还是可以用,我就 ***了
大概就是想把 lookahead 变成在栈上 "lookbehind",结果失败了草(name 的后面一个 token 肯定是 '(' 或 ',' ,但应该取决于是不是在括号内才对啊……)
ParserKt 可以处理这种文法,不过是通过
Piped 解析器处理的,如果读完 Name 后还能找到 ( 的话就可以再继续读下一部分,否则直接返回无消耗,前提是 k=1完全不支持 lookahead 真的可行吗……其实支持也不需要花多大力气
dnaugsuz
就因为 Iterator 没打算写 lookahead (因为我把这个当 feature,认真的) 然后这里又没有 ParserKt 的 contextual,就顺手用了 exception 来处理需要 lookahead 的 Name / Call…… 正常返回是 name、abnormal termination 是读到 ',' 了 结果就把 Expr {',' Expr} 写出了这种清奇的画风,又因为 toplevel() 也可能读到闭括号(我没做好读取数据处理域控制) 我就顺手给 toplevel()…
这个
在 Toplevel 里,
可以预读 name 后面的 punctuation ,但是总有不像预期的
为了复用 Toplevel 解析器,就必须做到对非 expected token 情况的处理,比如把预取的东西放回去,看等下别的子解析器会处理——最简单的做法
否则的话,Toplevel 里有一套
一般来说,lookahead 并不是一件特别难的事情好不好…… 这个文法就可以用 LL(1) 流,只需在读完 name 后看一下 peek 是不是 '(' 即可 disambiguate 了。
ParserKt 之所以可以用 Piped,是因为它的流本身带一个 peek(1) 的能力,相当于 lookahead-1 的文法都是支持的,但它没法优雅地支持更多 lookahead、更复杂的文法了。
name',' 的问题可以视为是一个代码复用性的问题。 #PLT #DontKnow在 Toplevel 里,
name '(' ;在 Call 里, name ',' 可以预读 name 后面的 punctuation ,但是总有不像预期的
( 那样的情况,这时就需要特殊处理为了复用 Toplevel 解析器,就必须做到对非 expected token 情况的处理,比如把预取的东西放回去,看等下别的子解析器会处理——最简单的做法
否则的话,Toplevel 里有一套
disambigNameCall 、Call 里面的另一套不仅预取继承自 Toplevel 的,还得有为 ',' 时继续扫描下一个逗号切分项目的能力(可以用异常之类的传递,但那没法类型安全)一般来说,lookahead 并不是一件特别难的事情好不好…… 这个文法就可以用 LL(1) 流,只需在读完 name 后看一下 peek 是不是 '(' 即可 disambiguate 了。
ParserKt 之所以可以用 Piped,是因为它的流本身带一个 peek(1) 的能力,相当于 lookahead-1 的文法都是支持的,但它没法优雅地支持更多 lookahead、更复杂的文法了。
Forwarded from Fan Dang
话说 vertx deploy 多个实例,为啥他们能共用一个 tcp 端口?(指 HTTP 服务
Forwarded from 神林| 我永远喜欢阿里云|AS45102
Windows下系统内核有专门的方法能自动帮你监听完了同时发给你两个软件,Linux下也是一样的原理
🤔 #Kotlin ParserKt 的新一版也打算把
并且,把原先利用 Piped 的ContextualRight (顾名思义是),现在没列到 "PWOC SDRIES CCDPAC SJIT NLL" 里的有 MapPattern, TextPattern, LexerFeed, GreedyPattern, RangedGreedyPattern, ContextualRight (当然不包括 PairedTriePattern, DictPattern 什么的) 了(就可以完整利用预定义类来写 JSON 解析器了)
草,刚才发现
我还是给它的
reversedMap() 给变成 asserted 模式,添加更多更“早期”的检查。并且,把原先利用 Piped 的
integral.fractional 解分支+解析 给变成了 草,刚才发现
ContextualRight 还不如直接用 Piped 来得痛快呢……我还是给它的
companion object 添加 Piped.ifSome 吧,免得每次对解析结果 it?.let {}
感觉 map 方法编写的标准流程是 clone + set transfrom get#Cplusplus #CV 🤔 讲真,我真的不喜欢 OpenCV 的动态属性,它把本来可以轻易自动补齐的东西变成了还要查会文档、本来可以更强类型的东西做成了一堆
不仅使用动态属性,还不对常见 prop (比如 fps, position) 做些辅助属性……
OpenCV 的
突然觉得对于 pull 事件来说,scanner 都可以用来做对 modifier key 的支持
int 不仅使用动态属性,还不对常见 prop (比如 fps, position) 做些辅助属性……
In [1]: from cv2 import CAP_PROP_POS_MSEC
CAP_PROP_POS_AVI_RATIO
CAP_PROP_POS_FRAMES
CAP_PROP_POS_MSEC
OpenCV 的
waitKey(block_ms) 比较魔性,它会像 getchar() 一样有一个缓冲区,是队列 pull 模式,而不是你不 waitKey() 击键就无效。突然觉得对于 pull 事件来说,scanner 都可以用来做对 modifier key 的支持
我刚才给
https://github.com/duangsuse/extract-subtitles/commit/a1f7927a481ee7a16a9dcb848286543beda41944
特性添加是为了使精准提取真正可能。
gui_crop_select.py 脚本添加了 timline seek/pause 的功能,并且在 paused 状态下也可以 <> 和 crop。https://github.com/duangsuse/extract-subtitles/commit/a1f7927a481ee7a16a9dcb848286543beda41944
特性添加是为了使精准提取真正可能。
GitHub
Add controls for gui_crop_select.py · duangsuse/extract-subtitles@a1f7927
Extract Subtitles From Video 视频字幕提取 帧间差分法识别关键帧 OCR识别 - duangsuse/extract-subtitles
if miniseek in frame_ops: frame_ops[miniseek]() #of key-char [89]
草,本来想用 ord('9') - ord('8') 玩魔法的……Forwarded from Mivik Q
如果硬要底层类型map key就得分别Int-IntMap, Int-LongMap...... 排列组合