Spec-Zone.ru › OCaml
☰Язык OCaml
  • Язык OCaml
  • Расширения языка

Глава 12 Расширения языка

16 Синтаксис только для расширений

  • 16.1 Операторы расширений
  • 16.2 Литералы расширений

(Добавлено в OCaml 4.02.2, расширено в версии 4.03)

Некоторые синтаксические конструкции принимаются при разборе и отклоняются при проверке типов. Поэтому такие синтаксические конструкции нельзя использовать непосредственно в стандартном OCaml. Однако переписчики -ppx и другие внешние инструменты могут использовать эту снисходительность парсера, чтобы расширять язык новыми синтаксическими конструкциями, преобразуя их в стандартные конструкции.

16.1 Операторы расширений

(Добавлено в OCaml 4.02.2, распространено на унарные операторы в OCaml 4.12.0)

infix-symbol ::= ...
∣ # { operator-char } # { operator-char ∣ # }
prefix-symbol ::= ...
∣ (? ∣ ~ ∣ !) { operator-char } # { operator-char ∣ # }

Для расширений доступны два класса операторов: инфиксные операторы, имя которых начинается с символа # и содержит более одного символа #, и унарные операторы, имя которых начинается с символа ?, ~ или ! и содержит как минимум один символ #.

Например:

# let infix x y = x##y;;

Error: ## is not a valid value identifier.
# let prefix x = !#x;;

Error: !# is not a valid value identifier.

Обратите внимание, что и ##, и !# должны быть удалены переписчиком ppx, чтобы этот пример стал допустимым.

16.2 Литералы расширений

(Добавлено в OCaml 4.03)

float-literal ::= ...
∣ [-] (0…9) { 0…9 ∣ _ } [. { 0…9 ∣ _ }] [(e ∣ E) [+ ∣ -] (0…9) { 0…9 ∣ _ }] [g…z ∣ G…Z]
∣ [-] (0x ∣ 0X) (0…9 ∣ A…F ∣ a…f) { 0…9 ∣ A…F ∣ a…f ∣ _ } [. { 0…9 ∣ A…F ∣ a…f ∣ _ }] [(p ∣ P) [+ ∣ -] (0…9) { 0…9 ∣ _ }] [g…z ∣ G…Z]
int-literal ::= ...
∣ [-] (0…9) { 0…9 ∣ _ }[g…z ∣ G…Z]
∣ [-] (0x ∣ 0X) (0…9 ∣ A…F ∣ a…f) { 0…9 ∣ A…F ∣ a…f ∣ _ } [g…z ∣ G…Z]
∣ [-] (0o ∣ 0O) (0…7) { 0…7 ∣ _ } [g…z ∣ G…Z]
∣ [-] (0b ∣ 0B) (0…1) { 0…1 ∣ _ } [g…z ∣ G…Z]

Целочисленные и вещественные литералы, за которыми следует односимвольный идентификатор из диапазона [g..z∣G..Z], являются литералами только для расширений.

« Генеративные функторыВстроенные записи »
Copyright © 2026 Institut National de Recherche en Informatique et en Automatique

© 1995-2026 INRIA.
https://ocaml.org/manual/5.5/extensionsyntax.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API