9

我看过一些源代码

let rec parse_document = parser
    | [< len = parse_int32; st; >] ->
      parse_list [] (ES.take_int32 len st)
    | [< >] -> malformed "parse_document"

我能知道[< >]里面是什么吗?谷歌搜索这种迹象太难了。

4

4 回答 4

7

这是Stream数据类型的语法糖。它的操作在使用 OCaml 开发应用程序一书的这一章中有详细描述。

语法糖不是编译器内置的,需要经过Camlp4预处理器的预处理。为此,您必须添加-pp camlp4o到编译命令行。

于 2013-04-22T15:05:25.050 回答
2

这是一个流。它主要用于创建解析器。但是流已从 OCaml 中删除,现在作为camlp4 扩展提供。

于 2013-04-22T15:03:53.367 回答
2

它是Stream 解析语法扩展的一部分,表示空流。

于 2013-04-22T15:04:01.267 回答
1

这就是流的字面语法。流就像一个列表,只是一次只有一个元素可用,并且您通过读取它来删除第一个元素。

它似乎主要用于解析器代码。解析器——parser在你的例子中用关键字声明——是可以“使用”流元​​素的函数。

于 2013-04-22T15:03:02.463 回答