小编Mor*_*ger的帖子

对于没有语句终止符的语言,在解析器中更喜欢使用shift而不是reduce

我正在解析一种没有像;. 表达式被定义为最长的标记序列,因此5-5必须解析为减法,而不是解析为两个语句(文字5后跟一元否定-5)。

\n

我使用LALRPOP作为解析器生成器(尽管名称如此,但它是 LR(1) 而不是 LALR,据我所知)。LALRPOP 没有优先级属性,并且默认情况下不像 yacc 那样更喜欢移位而不是归约。我想我了解如何通过构建规则“链”在 LR 语法中编码常规运算符优先级,但我不知道如何将其应用于此问题。

\n

预期的解析将是(括号中的各个语句):

\n
"5 - 5"   \xe2\x86\x92 5-5 instead of 5, -5\n"5 (- 5)" \xe2\x86\x92 5, -5\n"- 5"     \xe2\x86\x92 -5\n"5 5"     \xe2\x86\x92 5, 5\n
Run Code Online (Sandbox Code Playgroud)\n

如何更改语法,使其始终更喜欢较长的解析?

\n

浏览谷歌结果的前几页以及堆栈溢出并没有针对这个特定问题产生任何结果。大多数相关问题需要更多的前瞻,否则结果是不允许出现没有终止符的连续语句。

\n

我创建了一个最小的示例语法来重现移位/归约冲突(该语法中的语句只是一个表达式,在完整的语法中还会有“if”、“while”等以及更多级别的运算符优先级,但是为了简洁起见,我省略了它们)。除了一元减号之外,原始语法中还存在其他冲突,例如print(5),可以将其解析为标识符print和括号内的数字(5)或函数调用。可能还会有更多这样的冲突,但它们都有相同的根本问题,即应该首选较长的序列,但两者目前都是有效的,尽管只有第一个应该有效。

\n

为了方便起见,我创建了一个存储库(签出和cargo run)。语法是:

\n
"5 - 5"   \xe2\x86\x92 5-5 instead of 5, -5\n"5 (- 5)" \xe2\x86\x92 5, -5\n"- …
Run Code Online (Sandbox Code Playgroud)

grammar parsing rust lr-grammar ambiguous-grammar

7
推荐指数
1
解决办法
523
查看次数

使用MP4文件块作为缩略图

我想从视频中提取单帧(作为拇指),而无需下载完整的视频文件.我想只读取mp4标题(信息应该在moov原子中),然后下载所需的字节范围.Afaik这就是当您跳到无缓冲的部分时,浏览器(HTML5视频)所做的事情

我已经看过:HTML5视频的字节范围请求(伪流)如何工作?但我无法弄清楚如何与ffmpeg一起使用它.

非常感谢!

video mp4 ffmpeg

1
推荐指数
1
解决办法
1248
查看次数

具有关联类型的Swift子协议

我想知道如何在Swift中表达这种类型的关系(例如kotlin中的示例)

interface Index<K, V> {
  fun getAll(key: K): Sequence<V>
}
Run Code Online (Sandbox Code Playgroud)

我试图使用具有关联类型的协议,如下所示:

protocol Index {
    associatedtype Key
    associatedtype Value
    associatedtype Result: Sequence where Sequence.Element == Value

    func getAll(key: Key) -> Result
}
Run Code Online (Sandbox Code Playgroud)

但这不起作用(Associated type 'Element' can only be used with a concrete type or generic parameter base

然后,作为一种解决方法,我尝试了此操作:

protocol Index {
    associatedtype Key
    associatedtype Value

    func get<T: Sequence>(key: Key) -> T where T.Element == Value
}
Run Code Online (Sandbox Code Playgroud)

但这似乎并不是正确/惯用的方法。

只有两个约束:

  1. 序列不能是具体类型
  2. Index上的所有方法都没有有意义的实现

笔记:

  • 将存在一个Sequence特定于每个实现的类/类型Index

我愿意接受任何其他结构性改变!提前致谢。

generics associated-types swift swift-protocols

1
推荐指数
1
解决办法
1823
查看次数