(($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)
作为此语义操作的结果。
我是 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)
作为此语义操作的结果。