RÉFÉRENCE VITTE / Langage

Grammaire et lexique

Les règles lexicales disent comment lire les caractères ; la grammaire dit comment combiner les tokens en programmes.

Niveau de garantieEBNF et lexer synchronisés au niveau des tokens ; les productions ne garantissent ni parsing uniforme ni compilation.
Source de référence : grammar/vitte.ebnf
Portée de cette page

grammar/vitte.ebnf est le fichier de syntaxe canonique et indique qu’il décrit une syntaxe acceptée par le parseur. Le contrôle automatisé synchronise les mots-clés, opérateurs et tokens ; il ne compare pas chaque production. Les fixtures valident une partie de la grammaire, et les autres frontends peuvent accepter des extensions absentes de l’EBNF. Consulte l’état détaillé du support avant de compter sur une forme.

Structure générale

Un fichier est une suite de déclarations suivie de la fin du fichier. Les déclarations les plus courantes sont un en-tête de module space, des imports, des constantes, des types et des procédures.

space exemple::calcul;

const REPONSE: i64 = 42;

proc additionner(gauche: i64, droite: i64) -> i64 {
    return gauche + droite;
}

Mots-clés

La grammaire réserve les mots suivants. Leur apparition comme noms d’identifiants ordinaires est donc limitée :

spaceuseexportconststatictypeopaqueformpicktraitimplprocexternintrinsicmacrotestpubasyncunsafecomptimewhererequiresensuresletmutsetreturngivebreakcontinuedeferassertifelifelsewhileloopforinmatchasmandornotmoverefawaitselftruefalsenull

Cette liste est dérivée de grammar/vitte.ebnf. L’implémentation peut avoir d’autres mots contextuels ; la table lexicale du compilateur et la grammaire doivent rester alignées.

Identifiants et commentaires

Un identifiant commence par une lettre, un souligné ou un caractère Unicode non ASCII valide ; les chiffres sont permis après le premier caractère. Les espaces et caractères de contrôle ne font pas partie d’un identifiant. La casse compte : score et Score désignent deux noms différents.

Les espaces blancs sont ignorés entre les tokens. Les commentaires de ligne commencent par // et les commentaires de bloc sont encadrés par /* et */. La grammaire autorise l’imbrication des commentaires de bloc. Dans le dépôt, /// sert de convention pour les commentaires de documentation.

Littéraux numériques

FormeExempleUsage
Décimal42, 1_000Entier en base 10 ; le souligné sépare les chiffres.
Binaire0b101010Préfixe 0b ou 0B.
Octal0o52Préfixe 0o ou 0O.
Hexadécimal0x2APréfixe 0x ou 0X.
Flottant décimal3.5, 1e6Fraction et/ou exposant décimal.
Flottant hexadécimal0x1.8p2Mantisse hexadécimale et exposant en puissance de deux.

Le type concret d’un littéral dépend du contexte et de l’analyse de types. Ne déduis pas sa largeur du seul nombre de chiffres ; annote le type ou utilise une conversion explicite lorsque l’API l’exige.

Chaînes, caractères et échappements

Une chaîne utilise des guillemets doubles et un caractère utilise des apostrophes. Les caractères de fin de ligne ne sont pas écrits littéralement dans ces tokens ; ils s’introduisent avec un échappement. Les échappements définis comprennent la barre oblique inversée, les guillemets, \n, \r, \t, \0, les caractères de contrôle ainsi que les formes hexadécimales \xNN, \uNNNN et \UNNNNNNNN.

let message: string = "ligne 1\nligne 2";
let initiale: char = 'V';

Notation EBNF utilisée

  • ::= signifie « est défini par ».
  • | sépare des choix.
  • [ ... ] rend un élément facultatif.
  • { ... } indique une répétition, éventuellement vide.

Ce que les tests confirment

ÉlémentDans l’EBNFAnalyseur vérifiéCompilation / exécution
Mots-clés, opérateurs et tokensListe et opérateurs documentés.check-ebnf-frontend-sync vérifie leur présence dans le lexer et la couverture des tokens par le parseur.Ce contrôle ne teste ni typage ni génération de code.
Littéraux et expression de baseDécrits dans le fichier EBNF.Fixture expression_literals_parse.vit validée par test-grammar.Des entiers, booléens, chaînes et flottants apparaissent dans des programmes runtime ; tous les échappements lexicaux ne sont pas couverts par ces seuls tests.
form, pick, let, marqueurs de référenceDécrits.Fixtures form_parse, pick_parse, let_mut_ok et ref_param_type_marker_ok.Formes, tableaux et choix ont des tests backend/runtime ; la seule fixture de parsing ne prouve pas la compilation.
as, attributs et gardes de matchas et attributs absents ; gardes non exprimées par la règle EBNF des bras.Le test de parité accepte un attribut ; le sous-ensemble natif accepte casts et gardes.Les casts et plusieurs formes de match sont exécutés par les tests natifs.
Nullable ?T, await, defer, pointeursawait/defer/pointeurs décrits ; ?T absent du type EBNF.Pas de fixture ciblée passée pour chacun dans les suites auditées.Non prouvé au backend/runtime.

Fixtures et résultats détaillés : alignement grammaire/parseur, sous-ensemble natif et matrice de support.

Ouvrir le fichier complet de grammaire sur GitHub →