Analyse syntaxique & Compilation
@gram-lang/kitchen : Simule la chronologie de la recette, agrège les listes d’ingrédients et gère l’ajustement dynamique des quantités.
Gram est un DSL (Domain-Specific Language) déclaratif open-source pour les recettes de cuisine, pensé pour les développeurs.
La plupart des formats de recettes ne sont que des blocs de texte statiques. Gram propose une approche différente : il prend vos instructions rédigées en texte brut et les compile en données structurées, calculées et relationnelles.
Cuisiner, c’est un peu comme exécuter un algorithme : on prend des ingrédients en entrée et on obtient un plat en sortie. Mais c’est avant tout une passion. Gram est né de ce constat : passionné de cuisine, je cherchais un outil capable d’allier la rigueur du code à la créativité culinaire.
J’ai toujours aimé l’idée d’écrire des recettes en texte brut (plain text), en m’inspirant de projets pionniers comme l’excellent Cooklang (idéal pour des recettes maison simples et rapides). Mais dès que les choses se compliquent — comme en pâtisserie, avec ses multiples préparations, le « pourcentage du boulanger » ou des plannings complexes — s’appuyer uniquement sur le langage naturel montre vite ses limites.
Structurellement, Gram s’inspire beaucoup du célèbre site Cooking for Engineers et de ses recettes présentées sous forme de tableaux. Puisque Gram compile les recettes en un arbre JSON déterministe, cela ouvre la voie au développement de rendus visuels avancés (diagrammes de Gantt, flux tabulaires, etc.).
J’ai créé Gram comme une alternative pour ces scénarios plus exigeants. Il introduit une logique relationnelle, une précision physique et une composition modulaire dans la rédaction de vos recettes :
70% @&farine).@, ~, ^, #), Gram garantit que l’analyseur syntaxique ne confondra jamais les températures, les temps, les ingrédients et le matériel.@use) : Découpez vos composants réutilisables (pâtes, bouillons, sauces) dans leurs propres fichiers .gram. Gram intègre leurs étapes, adapte automatiquement leurs proportions aux quantités requises et fusionne leurs ingrédients sur la liste de courses globale.L’écosystème Gram met à votre disposition tout le nécessaire pour concevoir vos recettes comme de véritables logiciels :
Analyse syntaxique & Compilation
@gram-lang/kitchen : Simule la chronologie de la recette, agrège les listes d’ingrédients et gère l’ajustement dynamique des quantités.
Analyseur sémantique
@gram-lang/analyzer : Gère la normalisation des masses, le calcul des rendements, l’estimation nutritionnelle et l’agrégation avancée des courses via votre base de données locale.
Serveur de langage (LSP)
@gram-lang/language-server : Apporte un véritable support d’édition pour vos recettes (autocomplétion, diagnostics en temps réel, infobulles).
Interface CLI
@gram-lang/cli : Permet de compiler, d’ajuster les proportions, de comparer les révisions (diff) et de gérer votre base d’ingrédients depuis le terminal.
Moteur de rendu
@gram-lang/renderer : Génère instantanément du HTML sémantique ou du Markdown à partir du JSON compilé.
Gram reste très lisible, mais introduit discrètement des structures de données puissantes. Voici un aperçu avec la recette classique des cannelés bordelais :
Remarquez l’étape [Incorporer] qui utilise <@œufs{6} : cette syntaxe d’ingrédient composite indique à Gram que vous n’utilisez que les jaunes, tout en précisant que la liste de courses devra comptabiliser des œufs entiers. Le tag de section ~{-1d} met en place un rétro-planning basé sur l’heure finale de cuisson, et ->&lait chaud{} déclare une variable intermédiaire prête à être réutilisée plus loin.