=========================== Values =========================== x;; M.x;; ( + );; M.( + );; --- (compilation_unit (value_path (value_name)) (value_path (module_name) (value_path (value_name))) (value_path (value_name (infix_operator))) (value_path (module_name) (value_path (value_name (infix_operator))))) =========================== Constants =========================== 493;; 10_000_000;; 0x1ed;; 0o644;; 0b111101101;; 4.93e2;; 493e+0;; 0x7b.4p2;; 'x';; '\n';; '\'';; '\120';; '\x78';; '\o170';; ' ';; "OCaml";; "\"\079\u{43}aml\"";; "OCaml\ OCaml";; "%d %05.2f";; "@[%s@ %d@]@.";; " ";; {|OCaml|};; {id||id};; {id|{|}id}|idd||id};; true;; ();; --- (compilation_unit (number) (number) (number) (number) (number) (number) (number) (number) (character) (character (escape_sequence)) (character (escape_sequence)) (character (escape_sequence)) (character (escape_sequence)) (character (escape_sequence)) (character) (string) (string (escape_sequence) (escape_sequence) (escape_sequence) (escape_sequence)) (string (escape_sequence)) (string (conversion_specification) (conversion_specification)) (string (pretty_printing_indication) (conversion_specification) (pretty_printing_indication) (conversion_specification) (pretty_printing_indication) (pretty_printing_indication)) (string) (quoted_string) (quoted_string) (quoted_string) (boolean) (unit)) =========================== Typed expression =========================== (x : t) --- (compilation_unit (typed_expression (value_path (value_name)) (type_constructor_path (type_constructor)))) =========================== Lists, arrays and records =========================== [];; [x; x; x];; x :: x :: xs;; [||];; [| x; x; x |];; { x = x; x; };; --- (compilation_unit (list_expression) (list_expression (value_path (value_name)) (value_path (value_name)) (value_path (value_name))) (cons_expression (value_path (value_name)) (cons_expression (value_path (value_name)) (value_path (value_name)))) (array_expression) (array_expression (value_path (value_name)) (value_path (value_name)) (value_path (value_name))) (record_expression (field_expression (field_path (field_name)) (value_path (value_name))) (field_expression (field_path (field_name))))) =========================== Get and set expressions =========================== x.y.z <- x;; x.(0).[0].{0,0} <- x;; x.%(0).M.%(0) <- x;; 1 #? x.%(0);; --- (compilation_unit (set_expression (field_get_expression (field_get_expression (value_path (value_name)) (field_path (field_name))) (field_path (field_name))) (value_path (value_name))) (set_expression (bigarray_get_expression (string_get_expression (array_get_expression (value_path (value_name)) (number)) (number)) (product_expression (number) (number))) (value_path (value_name))) (set_expression (array_get_expression (array_get_expression (value_path (value_name)) (indexing_operator_path (indexing_operator)) (number)) (indexing_operator_path (module_name) (indexing_operator_path (indexing_operator))) (number)) (value_path (value_name))) (infix_expression (number) (infix_operator) (array_get_expression (value_path (value_name)) (indexing_operator_path (indexing_operator)) (number)))) =========================== Coercions =========================== (x :> t);; (x : t :> t);; --- (compilation_unit (coercion_expression (value_path (value_name)) (type_constructor_path (type_constructor))) (coercion_expression (value_path (value_name)) (type_constructor_path (type_constructor)) (type_constructor_path (type_constructor)))) =========================== Local opens =========================== M.(x);; M.[x; x];; --- (compilation_unit (local_open_expression (module_name) (value_path (value_name))) (local_open_expression (module_name) (list_expression (value_path (value_name)) (value_path (value_name))))) =========================== Package expressions =========================== (module M);; (module M : T);; --- (compilation_unit (package_expression (module_name)) (package_expression (module_name) (module_type_path (module_type_name)))) =========================== Product expressions =========================== x, y, z;; (x, y) --- (compilation_unit (product_expression (product_expression (value_path (value_name)) (value_path (value_name))) (value_path (value_name))) (parenthesized_expression (product_expression (value_path (value_name)) (value_path (value_name))))) =========================== Constructors =========================== A;; M.A;; A x;; ( :: ) (x, l);; --- (compilation_unit (constructor_path (constructor_name)) (constructor_path (module_name) (constructor_path (constructor_name))) (application_expression (constructor_path (constructor_name)) (value_path (value_name))) (application_expression (constructor_path (constructor_name)) (parenthesized_expression (product_expression (value_path (value_name)) (value_path (value_name)))))) =========================== Tags =========================== `A;; `A x;; --- (compilation_unit (tag) (application_expression (tag) (value_path (value_name)))) =========================== Function application =========================== f x;; f x x;; f ~x ?x:x;; --- (compilation_unit (application_expression (value_path (value_name)) (value_path (value_name))) (application_expression (value_path (value_name)) (value_path (value_name)) (value_path (value_name))) (application_expression (value_path (value_name)) (label (label_name)) (labeled_argument (label (label_name)) (value_path (value_name))))) =========================== Operators =========================== !x;; ~-x;; -x;; x - y;; x lsl 1;; --- (compilation_unit (prefix_expression (prefix_operator) (value_path (value_name))) (prefix_expression (prefix_operator) (value_path (value_name))) (prefix_expression (prefix_operator) (value_path (value_name))) (infix_expression (value_path (value_name)) (infix_operator) (value_path (value_name))) (infix_expression (value_path (value_name)) (infix_operator) (number))) =========================== If, while and for =========================== if x then y;; if x then y else z;; while x do y done;; for i = 1 to n do x done;; --- (compilation_unit (if_expression (value_path (value_name)) (then_clause (value_path (value_name)))) (if_expression (value_path (value_name)) (then_clause (value_path (value_name))) (else_clause (value_path (value_name)))) (while_expression (value_path (value_name)) (do_clause (value_path (value_name)))) (for_expression (value_name) (number) (value_path (value_name)) (do_clause (value_path (value_name))))) =========================== Sequence expressions =========================== x; y; z;; --- (compilation_unit (sequence_expression (value_path (value_name)) (sequence_expression (value_path (value_name)) (value_path (value_name))))) =========================== Match expressions =========================== match x with | x -> x | x when x -> x | x | x -> x | exception x -> x;; match+ x with x -> x;; --- (compilation_unit (match_expression (value_path (value_name)) (match_case (value_name) (value_path (value_name))) (match_case (value_name) (value_path (value_name)) (value_path (value_name))) (match_case (or_pattern (value_name) (value_name)) (value_path (value_name))) (match_case (exception_pattern (value_name)) (value_path (value_name)))) (match_expression (match_operator) (value_path (value_name)) (match_case (value_name) (value_path (value_name))))) =========================== Function expressions =========================== function 0 -> 0 | x -> 1 --- (compilation_unit (function_expression (match_case (number) (number)) (match_case (value_name) (number)))) =========================== Try expressions =========================== try x with Exception -> () --- (compilation_unit (try_expression (value_path (value_name)) (match_case (constructor_path (constructor_name)) (unit)))) =========================== Let expressions =========================== let x = 0 in x;; let rec x = y and y = x in x;; --- (compilation_unit (let_expression (value_definition (let_binding (value_name) (number))) (value_path (value_name))) (let_expression (value_definition (let_binding (value_name) (value_path (value_name))) (let_binding (value_name) (value_path (value_name)))) (value_path (value_name)))) =========================== Assert expressions =========================== assert x --- (compilation_unit (assert_expression (value_path (value_name)))) =========================== Lazy expressions =========================== lazy x --- (compilation_unit (lazy_expression (value_path (value_name)))) =========================== Let module, open, exception =========================== let module M = M in x;; let open M in x;; let exception E in x;; --- (compilation_unit (let_module_expression (module_definition (module_binding (module_name) (module_name))) (value_path (value_name))) (let_open_expression (open_statement (module_name)) (value_path (value_name))) (let_exception_expression (exception_definition (constructor_declaration (constructor_name))) (value_path (value_name)))) =========================== Parenthesized expressions =========================== let x = (x) --- (compilation_unit (value_definition (let_binding (value_name) (parenthesized_expression (value_path (value_name)))))) =========================== Precedence =========================== let x = x in if x then x <- x := ! x . x ## x x x lsl x ** x * x mod x + x - x :: x :: x @ x ^ x < x > x & x && x or x || x, x, x; x; x --- (compilation_unit (let_expression (value_definition (let_binding (value_name) (value_path (value_name)))) (sequence_expression (if_expression (value_path (value_name)) (then_clause (set_expression (instance_variable_name) (infix_expression (value_path (value_name)) (infix_operator) (product_expression (product_expression (infix_expression (infix_expression (infix_expression (infix_expression (infix_expression (cons_expression (infix_expression (infix_expression (infix_expression (infix_expression (infix_expression (application_expression (infix_expression (field_get_expression (prefix_expression (prefix_operator) (value_path (value_name))) (field_path (field_name))) (infix_operator) (value_path (value_name))) (value_path (value_name)) (value_path (value_name))) (infix_operator) (infix_expression (value_path (value_name)) (infix_operator) (value_path (value_name)))) (infix_operator) (value_path (value_name))) (infix_operator) (value_path (value_name))) (infix_operator) (value_path (value_name))) (infix_operator) (value_path (value_name))) (cons_expression (value_path (value_name)) (value_path (value_name)))) (infix_operator) (infix_expression (value_path (value_name)) (infix_operator) (value_path (value_name)))) (infix_operator) (value_path (value_name))) (infix_operator) (value_path (value_name))) (infix_operator) (infix_expression (value_path (value_name)) (infix_operator) (value_path (value_name)))) (infix_operator) (infix_expression (value_path (value_name)) (infix_operator) (value_path (value_name)))) (value_path (value_name))) (value_path (value_name))))))) (sequence_expression (value_path (value_name)) (value_path (value_name))))))