miniml
Summary
| Latest Version | Unknown |
|---|---|
| License | Unknown |
| CI Status | Failing |
| Stars | 1 |
| Forks | 0 |
| Open Issues | 0 |
| Last Commit | 2023-01-08 |
| Downloads | 0 |
| Last Indexed | 2026-08-01 04:44 |
Installation
nimble install miniml
choosenim install miniml
git clone https://gitlab.com/valoranM/miniml
OS Compatibility
| Platform | Linux | macOS | Windows | FreeBSD | OpenBSD | NetBSD | Android | iOS | WASM | Embedded |
|---|---|---|---|---|---|---|---|---|---|---|
| miniml | ✓ | ✓ | ✓ | - | - | - | - | - | - | - |
Source
| Repository | https://gitlab.com/valoranM/miniml |
|---|---|
| Homepage | https://gitlab.com/valoranM/miniml |
| Registry Source | gitlab |
README
Mini Ml
Le Mini-Ml est un sous ensemble de ML, il est composé de 2 parties : 1. Les types 2. Les expressions
Fonctionnement

Lexer:
Utilise Ocamllex et génère des Token définis dans le parser.
Parser:
Utilise Menhir, prend les token générés par le lexer et crée des expressions qui respectent la grammaire.
Typdef Verif:
Parcourt les définitions de types pour voir si les types sont connus.
Type Checker:
Vérifie le bon typage du programme sans polymorphisme et sans contrainte.
/!\ Ne fonctionne plus
Type Infer:
Détermine les types des expressions et vérifie les contraintes, si elles ne sont pas respectées il produit une erreur.
(Utilisation de l'algo W [^1])
Les types
les types sont les suivants :
Bases:
int: les entiersbool: les booléenschar: les charactèresstring: les chaines de charactèresunit: l'unité
Utilisateur
type s = {id1 = e1; ...; idn = en;}: Structurestype s = | Enum1 |Enum2 ...: Types énuméréstype s = | Cons1 of t1 * ... * tn | ... | Const n: Types algébriquestype 'a s = | Some of 'a: Types algébriques paramétré
Les expressions
Les expressions sont les suivantes :
- n : un entier
- true : un booléen vrai
- false : un booléen faux
- 'c' : un charactère
- "..." : une chaine de charactère
- String.length s : taille de la chaine de charactère s
- s.[i] : récupère le i ème charactère de la chaine de charactère s
- () : l'unité
- ref e : une ref vers e
- !e : la valeur à l'adresse e
- id := e : place la valeur de e dans l'adresse id
- e1 ~ e2 : Les expression binaires
- ~ est un opérateur binaire parmis +, -, *, /, mod, ==, !=, <, <=, >, >=, &&, ||
- l'égalité structurelle et la négation =, <>
- ~ e : Les expression unaires
- ~ est un opérateur unaire parmis -, not
- if e1 then e2 else e3 : l'expression conditionnelle
- let x = e1 in e2 : l'expression de déclaration de variable
- let rec x = e1 in e2 : l'expression de déclaration de fonction récursive
- fun x -> e : l'expression de déclaration de fonction anonyme
- fun () -> e : fonction avec type unit en entrée
- e1 e2 : l'expression d'appel de fonction
- {a1 = e1; ...; an = en;} : l'expression de création de structure
- e.a : l'expression d'accès à un champ de structure
- e1.a <- e2 : l'expression d'écriture à un champ de structure
- [| e1; ...; en |] : tableau mutable
- Array.make n e : tableau de taille n contentant la valeur de e
- Array.length a : taille du tableau a
- e.(i) : case i du tableu e
- t.(i) <- e : chnage la valeur de la case i du tableau t en la valeur de e
- Enum : Construction d'une variable enum
- Constr(e1, ...): Construction d'une variable algébrique
- match e with | p1 -> e1 ... | pn -> en : pattern matching sur e avec les pattern pi
Pattern
pattern :=
| Jok
| Var of string
| Int of int
| Bool of true
| Construct of (string, pattern list)
Affichage
On peut affiches les valeur avec :
print_int nprint_book bprint_char cprint_string sprint_endline sprint_newline ()
Exemple
Message erreur
Quand il y a une erreur la ligne et la colonne est toujour indiqué et affiché comme ça:
File "file", line l, character n-n:
l| .............
^^^
Error: ....
Utilisation
compilation:
dune build
lancement:
dune exec -- miniml file.mml [-a] # exécute le code (-a affiche les adresse dans le tas)
dune exec -- debug file.mml # affiche l'AST
Avancée
| mmllexer | mmlparser | typechecker | interpreter | |
|---|---|---|---|---|
| Arithmétique | X | X | X | X |
| Variables | X | X | X | X |
| Fonctions | X | X | X | X |
| Structures | X | X | X | X |
| Récursion | X | X | X | X |
Références
[^1]: B. Heeren, J. Hage, and S. D. Swierstra. Generalizing Hindley-Milner type inference algorithms. Technical Report UU-CS-2002-031, Institute of Information and Computing Science, University Utrecht, Netherlands, July 2002.