Instructions et contrôle
Les instructions déclarent des valeurs locales, modifient l’état, contrôlent le parcours et terminent parfois une procédure.
grammar/vitte.ebnfVariables locales et affectation
let reponse: i64 = 42;
let mut compteur: i64 = 0;
set compteur = compteur + 1;
let peut préciser mut, un type, une valeur initiale, ou les deux. set introduit une expression d’affectation. Une liaison immuable ne doit pas être modifiée ; les règles exactes sont vérifiées lors de l’analyse sémantique.
Retour et fin de boucle
return expression;etgive expression;renvoient une valeur ; les formes sans expression terminent une procédure sans résultat.break;sort de la boucle courante.continue;passe au prochain cycle de la boucle courante.
Conditions et répétitions
if pret {
traiter();
} elif en_attente {
patienter();
} else {
terminer();
}
while indice < 4 {
set indice = indice + 1;
}
for valeur in 0..4 {
utiliser(valeur);
}
La grammaire prévoit if/elif/else, while, loop et for nom in expression. Les exemples de bibliothèque parcourent des plages demi-ouvertes : 0..4 contient 0 à 3. Les types de séquences itérables disponibles restent dépendants de l’implémentation.
Match
match etat {
Etat.Inactif => { afficher("arrêt"); },
Etat.Pret => { afficher("prêt"); },
}
Les bras de la grammaire ont la forme expression => bloc-ou-expression, séparés par des virgules. La production formelle accepte des expressions de bras ; ne suppose pas la prise en charge de motifs plus riches sans confirmation dans l’analyseur et le compilateur.
Assertions, différé, unsafe et assembleur
assert(expression);vérifie une propriété à un point donné.defer expression;oudefer { ... }marque une action différée ; vérifie le moment d’exécution garanti par le compilateur ciblé.unsafe { ... }délimite un bloc qui exige des garanties manuelles.asm(...);etasm "...";sont les formes d’assembleur admises par la grammaire.
Un bloc unsafe, une assertion ou une instruction reconnue ne garantit ni l’absence de dépassement ni le support par le backend.
Vérification par instruction
| Instruction | EBNF | Analyseur | Compilation constatée |
|---|---|---|---|
let, let mut, set | Décrites. | Acceptées ; test natif confirme aussi le rejet de set sans affectation. | Oui : liaisons, mutation locale, champs et index de tableau passent l’IR/C17 et l’exécution. |
return / give | Les deux formes sont décrites. | return est utilisé dans toutes les suites ; fixture dédiée à give non relevée. | return est largement compilé ; give non prouvé séparément. |
if / elif / else | Décrites. | if/else sont testés ; la parité de elif n’a pas de cas runtime retenu. | Oui pour conditions et sélection de valeurs dans les fixtures runtime. |
while, break, continue | Décrites. | Acceptées dans les fixtures d’exécution. | Oui : boucles et cibles de sortie/continuation compilées et exécutées. |
loop | Décrite. | Pas de fixture ciblée dans les suites exécutées pour cette forme exacte. | Non prouvé. |
for nom in expression | Décrit. | La syntaxe atteint le diagnostic backend dans le cas d’un tableau. | for nom in tableau est rejeté avec VITTE_BACKEND_E_CODEGEN. L’exécution d’une boucle for sur plage n’est pas prouvée par l’audit. |
match simple et variantes à charge utile | match et les bras simples sont décrits ; gardes/motifs sont des extensions par rapport à l’EBNF. | Acceptés dans les fixtures natives, y compris motifs de variantes et joker. | Oui : IR, C17 et exécution de choix simples et à charge utile. |
assert | Décrite. | Syntaxe listée ; pas de fixture isolée de cette instruction dans les tests runtime retenus. | Non prouvé comme instruction au backend dans cet audit. |
defer, unsafe, asm | Décrites. | Pas de fixture représentative identifiée pour chacun. | Non prouvé au backend et à l’exécution. |
Sources : grammaire EBNF · tests du frontend natif · liste des fixtures runtime · matrice générale.