Guide de programmation (Français)

Guide complet de programmation multilingual en français.

Ce guide présente la programmation avec multilingual en français. Il couvre les capacités du langage, le flux d’exécution, les exemples pratiques, et les points d’extension.


Objectif du projet

multilingual permet d’écrire du code dans plusieurs langues humaines, tout en conservant un modèle sémantique unique.

Concrètement :

  • vous écrivez des mots-clés dans votre langue (ex. soit, pour, dans, afficher) ;
  • le compilateur interne les mappe vers des concepts universels ;
  • le code est transpilé en Python puis exécuté.

Démarrage rapide

Les fichiers source du langage utilisent l’extension .ml (par exemple bonjour.ml).

1
2
3
4
5
6
7
8
9
10
11
# Installation
pip install multilingualprogramming

# Lancer le REPL en français
multilingual repl --lang fr

# Afficher aussi le Python généré
multilingual repl --lang fr --show-python

# Exécuter un fichier source
multilingual run bonjour.ml --lang fr

Exemple bonjour.ml :

1
afficher("Bonjour le monde")

Capacités principales du langage

Variables et affectation

1
2
soit total = 0
soit nom = "Alice"

Conditions

1
2
3
4
si total > 0:
    afficher("positif")
sinon:
    afficher("nul ou négatif")

Boucles

1
2
3
4
soit somme = 0
pour i dans intervalle(5):
    somme = somme + i
afficher(somme)

Sortie : 10

Fonctions

1
2
3
4
fonction carré(x):
    retourner x * x

afficher(carré(6))

Sortie : 36

Collections et slicing

1
2
3
soit valeurs = [10, 20, 30, 40]
afficher(valeurs[1:3])
afficher(valeurs[::-1])

Sortie : [20, 30] puis [40, 30, 20, 10]

Compréhensions

1
2
soit carrés = [x * x pour x dans intervalle(6)]
afficher(carrés)

Sortie : [0, 1, 4, 9, 16, 25]


Classes et objets

1
2
3
4
5
6
7
8
9
10
classe Compteur:
    fonction __init__(soi, départ):
        soi.valeur = départ

    fonction incrémenter(soi):
        soi.valeur = soi.valeur + 1
        retourner soi.valeur

soit c = Compteur(10)
afficher(c.incrémenter())

Sortie : 11


Imports

1
2
3
importer math
depuis math importer sqrt comme root_fn
afficher(root_fn(16))

Sortie : 4.0


Gestion d’exceptions

1
2
3
4
5
6
essayer:
    soit racine = root_fn(16)
sauf Exception comme erreur:
    soit racine = 0
finalement:
    afficher(racine)

Programmation asynchrone

1
2
3
4
5
6
7
8
9
importer asyncio

async_fonction télécharger(url: chaine) -> chaine:
    retourner f"contenu simulé pour {url}"

async_fonction lire(url: chaine) -> chaine:
    retourner attendre télécharger(url)

afficher(asyncio.run(lire("https://exemple.fr")))

Sortie : contenu simulé pour https://exemple.fr


Opérateur walrus (:=)

1
2
soit résultat = (n := 10) + 5
afficher(n, résultat)

Sortie : 10 15


Boucle tant_que

1
2
3
4
soit compteur = 0
tant_que compteur < 5:
    compteur = compteur + 1
afficher(compteur)

Sortie : 5


Logique booléenne

1
2
3
soit drapeau_ok = Vrai et non Faux
affirmer drapeau_ok
afficher(drapeau_ok)

Dépliage de dictionnaires

1
2
3
4
soit base = {"langue": "fr", "niveau": "intermédiaire"}
soit extra = {"niveau": "avancé", "thème": "tests"}
soit profil = {**base, **extra}
afficher(profil)

Sortie : {'langue': 'fr', 'niveau': 'avancé', 'thème': 'tests'}


Alias français des built-ins

Certains built-ins universels ont des alias localisés. Les noms universels Python restent utilisables en parallèle.

Alias français Built-in Python
afficher print
intervalle range
longueur len
somme sum
saisie input
ouvrir open
trie sorted
inverse reversed
énumérer enumerate
combiner zip
appliquer map
filtrer filter
type type
liste list
dico dict
ensemble set
tuple tuple

Voir la référence des alias built-in pour la liste complète.


Commandes REPL

Commande Description
:help Afficher l’aide
:language fr Forcer la langue française
:python Activer/désactiver l’affichage du Python généré
:reset Vider l’état de la session
:kw fr Lister les mots-clés français
:ops fr Lister les symboles et opérateurs
:q Quitter

Architecture technique

Le flux est identique pour toutes les langues :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Source français (.ml)
      │
      ▼  Lexer (tokenisation Unicode)
Tokens
      │
      ▼  Parser
AST surface
      │
      ▼  lower_to_core_ir()
CoreIRProgram
      │
      ▼  SemanticAnalyzer
AST validé
      │
      ▼  PythonCodeGenerator
Code Python (str)
      │
      ▼  exec() avec RuntimeBuiltins
Résultat

Ce design permet d’ajouter des langues sans réécrire parser/codegen.


Exemple complet

1
2
3
4
5
6
7
8
9
10
11
soit base = [1, 2, 3, 4, 5]
soit pairs = [x pour x dans base si x % 2 == 0]

fonction moyenne(liste):
    retourner somme(liste) / longueur(liste)

si longueur(pairs) > 0:
    afficher("Pairs:", pairs)
    afficher("Moyenne:", moyenne(pairs))
sinon:
    afficher("Aucune valeur paire")

Sortie attendue :

1
2
Pairs: [2, 4]
Moyenne: 3.0

Bonnes pratiques

  • Utiliser un seul style lexical par fichier (français ou autre) pour garder le code lisible
  • Vérifier les mots-clés disponibles via :kw fr
  • Activer --show-python au débogage pour comprendre la transpilation
  • Écrire des tests de bout en bout avec ProgramExecutor pour valider la sémantique

API Python

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from multilingualprogramming import ProgramExecutor

executor = ProgramExecutor()

# Exécuter du code français
executor.execute("""
soit items = [1, 2, 3]
afficher(somme(items))
""", language="fr")

# Transpiler vers Python sans exécuter
python_code = executor.transpile("""
pour i dans intervalle(5):
    afficher(i)
""", language="fr")
print(python_code)
# for i in range(5):
#     print(i)