Module Ast

type name = string
val pp_name : Ppx_deriving_runtime.Format.formatter -> name -> Ppx_deriving_runtime.unit
val show_name : name -> Ppx_deriving_runtime.string
type binop =
  1. | Add
    (*

    Сложение: '+'

    *)
  2. | Sub
    (*

    Вычитание: '-'

    *)
  3. | Mul
    (*

    Умножение: '*'

    *)
  4. | Div
    (*

    Деление: '/'

    *)
  5. | Eq
    (*

    Равенство: '='

    *)
  6. | Lt
    (*

    Меньше: '<'

    *)
  7. | Gt
    (*

    Больше: '>'

    *)
  8. | Le
    (*

    Меньше или равно: '<='

    *)
  9. | Ge
    (*

    Больше или равно: '>='

    *)

Бинарные операторы для арифметики и сравнения

val pp_binop : Ppx_deriving_runtime.Format.formatter -> binop -> Ppx_deriving_runtime.unit
val show_binop : binop -> Ppx_deriving_runtime.string
type expr =
  1. | Var of name
    (*

    Переменная, например: `x`, `y`, `foo`

    *)
  2. | Abs of name * expr
    (*

    Лямбда-функция (абстракция), например: `fun x -> x + 1`

    *)
  3. | App of expr * expr
    (*

    Применение функции, например: `f 5`

    *)
  4. | Const of int
    (*

    Целочисленная константа, например: `0`, `15`, `-7`

    *)
  5. | BinOp of binop * expr * expr
    (*

    Бинарная операция, например: `2 + 3`, `x * y`

    *)
  6. | If of expr * expr * expr
    (*

    Условное выражение: `if условие then ветка1 else ветка2`

    *)
  7. | Let of name * expr * expr
    (*

    Let-связывание: `let x = значение in тело`

    *)
  8. | LetRec of name * name * expr * expr
    (*

    Рекурсивное let-связывание: `let rec f x = тело_f in выражение`

    *)
  9. | Fix of expr
    (*

    Оператор фиксированной точки для рекурсии (fix combinator)

    *)
  10. | Prim of string * expr list
    (*

    Примитивные функции: `println_int(42)`

    *)
val pp_expr : Ppx_deriving_runtime.Format.formatter -> expr -> Ppx_deriving_runtime.unit
val show_expr : expr -> Ppx_deriving_runtime.string