diff --git a/AML/.gitignore b/AML/.gitignore
new file mode 100644
index 00000000..0e5f1e4b
--- /dev/null
+++ b/AML/.gitignore
@@ -0,0 +1,3 @@
+/_build
+/_coverage
+
diff --git a/AML/.ocamlformat b/AML/.ocamlformat
new file mode 100644
index 00000000..04d5660b
--- /dev/null
+++ b/AML/.ocamlformat
@@ -0,0 +1,2 @@
+version=0.27.0
+profile=janestreet
diff --git a/AML/AML.opam b/AML/AML.opam
new file mode 100644
index 00000000..1a3afca5
--- /dev/null
+++ b/AML/AML.opam
@@ -0,0 +1,40 @@
+# This file is generated by dune, edit dune-project instead
+opam-version: "2.0"
+synopsis: "A ML compiler"
+maintainer: ["suvorovrain" "," "kinokotakenoko9"]
+authors: ["suvorovrain" "," "kinokotakenoko9"]
+license: ["LGPL-2.1-or-later" "WITH" "OCaml-LGPL-linking-exception"]
+homepage: "https://github.com/suvorovrain/AML"
+bug-reports: "https://github.com/suvorovrain/AML/issues"
+depends: [
+ "dune" {>= "3.8" & = "3.19.1"}
+ "base"
+ "angstrom" {= "0.16.0"}
+ "qcheck-core"
+ "ppx_inline_test" {with-test}
+ "ppx_deriving"
+ "ppx_deriving_qcheck" {= "0.6"}
+ "ppx_expect"
+ "bisect_ppx"
+ "odoc" {with-doc}
+]
+build: [
+ ["dune" "subst"] {dev}
+ [
+ "dune"
+ "build"
+ "-p"
+ name
+ "-j"
+ jobs
+ "@install"
+ "@runtest" {with-test}
+ "@doc" {with-doc}
+ ]
+]
+dev-repo: "git+https://github.com/suvorovrain/AML.git"
+pin-depends: [
+ ["ppx_deriving_qcheck.0.6" "git+https://github.com/c-cube/qcheck.git#42429bf06ba12373cad02b1404f50d0ad6238af5"]
+]
+
+# Don't edit '*.opam' file manually. Use 'dune build @install'
\ No newline at end of file
diff --git a/AML/AML.opam.template b/AML/AML.opam.template
new file mode 100644
index 00000000..1f0a4807
--- /dev/null
+++ b/AML/AML.opam.template
@@ -0,0 +1,5 @@
+pin-depends: [
+ ["ppx_deriving_qcheck.0.6" "git+https://github.com/c-cube/qcheck.git#42429bf06ba12373cad02b1404f50d0ad6238af5"]
+]
+
+# Don't edit '*.opam' file manually. Use 'dune build @install'
\ No newline at end of file
diff --git a/AML/Makefile b/AML/Makefile
new file mode 100644
index 00000000..59f5bf0a
--- /dev/null
+++ b/AML/Makefile
@@ -0,0 +1,30 @@
+.PHONY: all test
+all:
+ dune build
+
+test:
+ dune test
+
+TEST_COV_D = /tmp/cov
+COVERAGE_OPTS = --coverage-path $(TEST_COV_D) --expect lib/
+
+fmt:
+ dune build @fmt --auto-promote
+
+lint:
+ dune build @lint --force
+
+release:
+ dune build --profile=release
+ dune runtest --profile=release
+
+.PHONY: test_coverage coverage
+test_coverage: coverage
+coverage:
+ $(RM) -r $(TEST_COV_D)
+ mkdir -p $(TEST_COV_D)
+ BISECT_FILE=$(TEST_COV_D)/language dune runtest --no-print-directory \
+ --instrument-with bisect_ppx --force
+ bisect-ppx-report html $(COVERAGE_OPTS)
+ bisect-ppx-report summary $(COVERAGE_OPTS)
+ @echo "Use 'xdg-open _coverage/index.html' to see coverage report"
diff --git a/AML/bin/AML.ml b/AML/bin/AML.ml
new file mode 100644
index 00000000..151b6a41
--- /dev/null
+++ b/AML/bin/AML.ml
@@ -0,0 +1,47 @@
+(** Copyright 2025-2026, Rodion Suvorov, Dmitriy Chirkov*)
+
+(** SPDX-License-Identifier: LGPL-3.0-or-later *)
+
+open Codegen
+open Format
+
+let usage_msg = "Usage: AML.exe