(($2 :: fst $1), snd $1) 在ocaml中做什么?

What does (($2 :: fst $1), snd $1) do in ocaml?

我是 ocaml 的初学者,只是有时需要一些语法方面的指导

(( :: fst ), snd )

我知道 $2 必须是行中的第二个标记,$1 是第一个标记,而 fst 和 snd 指的是一对中的第一个和第二个组件。我知道::通常表示列一个列表?

然后括号的整体位置让我觉得这是一对回归。

但这整行是什么意思?

此语法使用 ocamlyacc rule 语法,这是一种用于编写解析器的 DSL。符号 $N 指的是定义的非终结符的第 N 个语义属性。您可以将它们视为简单变量,由非终结符模式表达式绑定。那么(( :: fst ), snd )是什么意思呢?

它是一对,第一个成分是由</code>和<code>的第一个元素组成的列表 :: fst ,它本身就是一对。 </code> 的第二部分构成结果对的第二个组成部分。例如,假设 <code> = (5,7)</code> 是 <code>42,您将得到 ([42;5],7) 作为此语义操作的结果。