Ocaml 什么是PPX?

Ocaml 什么是PPX?,ocaml,reason,ppx,Ocaml,Reason,Ppx,在许多使用ReasonML的项目中,经常使用缩写词PPX,但很少解释 什么是PPX 为什么ReasonML需要它们?PPX来自Ocaml生态系统,ReasonML就是其中的一部分。基本上,PPX为您提供了一个扩展语言语法的API 退房 感谢您的支持,PPX(预处理器扩展)是一个抽象语法树(AST)重写器。本质上只是一个函数ast=>ast AST是语法的表示形式,是解析源代码后生成的树数据结构。由于PPX只能接受并返回此AST,因此它仅限于现有的OCaml/ReasonML语法。但是,它可以重新

在许多使用ReasonML的项目中,经常使用缩写词PPX,但很少解释

什么是PPX


为什么ReasonML需要它们?

PPX来自Ocaml生态系统,ReasonML就是其中的一部分。基本上,PPX为您提供了一个扩展语言语法的API

退房

感谢您的支持,PPX(预处理器扩展)是一个抽象语法树(AST)重写器。本质上只是一个函数
ast=>ast

AST是语法的表示形式,是解析源代码后生成的树数据结构。由于PPX只能接受并返回此AST,因此它仅限于现有的OCaml/ReasonML语法。但是,它可以重新解释语法,并且可以在字符串中嵌入完全不同的语法,从而实现有限的封装形式的语法扩展

PPX也不允许重写整个AST。它们仅限于用户使用与现有节点关联的属性(
[@…
)或扩展节点(
[%…]
)标记的节点这些是独立的AST节点。PPX将注册一个或多个钩子,当编译器遇到这些钩子时,这些钩子将接收与其关联的AST,并且可以在编译器继续到its阶段之前转换这些AST片段

例子 可能是使用最广泛的PPX。它允许从类型签名“派生”某些功能。例如:

[@deriving show]
type t = {
  foo: int,
  bar: string,
};
将生成一个
show
函数(以及其他一些函数),当给定类型为
t
的值时,该函数将返回一个漂亮的字符串表示形式

和都是将CSS解析为某些OCaml/ReasonML数据结构的PPX,用于JS库中的各种CSS。它们将CSS语法嵌入带引号的字符串中,至少出于此目的,该字符串只是一个普通字符串,允许换行,并且不需要转义
\

  [%style
    {|
      color: red;
      margin: auto 0 10px 1em;
      width: 70%;
      background: url(http://example.com/test.jpg)
    |}
  ];