Langue Grammaire
- parser grammar SolidityParser
Solidity est un langage de haut niveau statiquement typé, orienté vers les contrats et destiné à la mise en œuvre de contrats intelligents sur la plateforme Ethereum.
- rule source-unit
Au niveau le plus élevé, Solidity permet les pragmas, les directives d’importation et les définitions de contrats, d’interfaces, de bibliothèques, de structs, d’enums et de constantes.
- rule import-directive
Les directives d’importation importent les identifiants de différents fichiers.
- rule path
Chemin d’un fichier à importer.
- rule symbol-aliases
Liste d’alias pour les symboles à importer.
- rule contract-definition
Définition de haut niveau d’un contrat.
- rule interface-definition
Définition de haut niveau d’une interface.
- rule library-definition
Définition de haut niveau d’une bibliothèque.
- rule inheritance-specifier
Spécification de l’héritage pour les contrats et les interfaces. Peut optionnellement fournir les arguments du constructeur de base.
- rule contract-body-element
Déclarations pouvant être utilisées dans les contrats, les interfaces et les bibliothèques.
Les interfaces et les bibliothèques ne peuvent pas contenir de constructeurs, les interfaces ne peuvent pas contenir de variables d’état, et les bibliothèques ne peuvent pas contenir de fonctions de repli, de réception ou de variables d’état non constantes.
- rule call-argument-list
Arguments lors de l’appel d’une fonction ou d’un objet appelable similaire. Les arguments sont donnés soit sous forme de liste séparée par des virgules, soit sous forme de carte d’arguments nommés.
- rule identifier-path
Nom qualifié.
- rule modifier-invocation
Appel à un modificateur. Si le modificateur ne prend pas d’arguments, la liste des arguments peut être entièrement ignorée. (y compris les parenthèses ouvrantes et fermantes).
- rule visibility
Visibilité des fonctions et des types de fonctions.
- rule parameter-list
Une liste de paramètres, tels que les arguments de la fonction ou les valeurs de retour.
- rule constructor-definition
Définition d’un constructeur. Doit toujours fournir une implémentation. Notez que la spécification de la visibilité interne ou publique est dépréciée.
- rule state-mutability
Indiquer la mutabilité pour les types de fonctions. La mutabilité par défaut “non-payable” est supposée si aucune mutabilité n’est spécifiée.
- rule override-specifier
Un spécificateur de surcharge utilisé pour les fonctions, les modificateurs ou les variables d’état. Dans les cas où il y a des déclarations ambiguës dans plusieurs contrats de base qui sont remplacés, une liste complète des contrats de base doit être donnée.
- rule function-definition
La définition des fonctions de contrat, de bibliothèque et d’interface. Selon le contexte dans lequel la fonction est définie, d’autres restrictions peuvent s’appliquer. Par exemple, les fonctions des interfaces doivent être non implémentées, c’est-à-dire qu’elles ne peuvent pas contenir de bloc de corps.
- rule modifier-definition
La définition d’un modificateur. Notez que dans le corps d’un modificateur, l’underscore ne peut pas être utilisé comme identifiant, mais est utilisé comme déclaration de remplacement pour le corps d’une fonction à laquelle le modificateur est appliqué.
- rule fallback-function-definition
Définition de la fonction spéciale de repli.
- rule receive-function-definition
Définition de la fonction de réception spéciale.
- rule struct-definition
Définition d’une structure. Peut se trouver au niveau supérieur dans une unité source ou dans un contrat, une bibliothèque ou une interface.
- rule struct-member
La déclaration d’un membre de structure nommé.
- rule enum-definition
Définition d’un enum. Peut se produire au niveau supérieur dans une unité source ou dans un contrat, une bibliothèque ou une interface.
- rule user-defined-value-type-definition
Définition d’un type de valeur défini par l’utilisateur. Peut se produire au niveau supérieur dans une unité source ou dans un contrat, une bibliothèque ou une interface.
- rule state-variable-declaration
La déclaration d’une variable d’état.
- rule constant-variable-declaration
La déclaration d’une variable constante.
- rule event-parameter
Paramètre d’un événement.
- rule event-definition
Définition d’un événement. Peut se produire dans les contrats, les bibliothèques ou les interfaces.
- rule error-parameter
Paramètre d’une erreur.
- rule error-definition
Définition d’une erreur.
- rule using-directive
Utilisation de directives pour lier des fonctions de bibliothèques à des types. Peut se produire dans les contrats et les bibliothèques.
- rule type-name
Un nom de type peut être un type élémentaire, un type de fonction, un type de mappage, un type défini par l’utilisateur (par exemple, un contrat ou un struct) ou un type de tableau.
- rule elementary-type-name
- rule function-type-name
- rule variable-declaration
La déclaration d’une seule variable.
- rule data-location
- rule expression
Expression complexe. Peut être un accès à un index, un accès à une plage d’index, un accès à un membre, un appel de fonction (avec des options d’appel de fonction facultatives), une conversion de type, une expression unaire ou binaire, une comparaison ou une affectation, une expression ternaire, une nouvelle expression (c’est-à-dire la création d’un contrat ou l’allocation d’un tableau de mémoire dynamique), un tuple, un tableau en ligne ou une expression primaire (c’est-à-dire un identifiant, un littéral ou un nom de type).
- rule tuple-expression
- rule inline-array-expression
Une expression de tableau en ligne désigne un tableau de taille statique du type commun des expressions contenues.
- rule identifier
Outre les identificateurs ordinaires sans mot-clé, certains mots-clés comme « from » et « error » peuvent également être utilisés comme identificateurs.
- rule literal
- rule boolean-literal
- rule string-literal
Une chaîne de caractères complète est constituée d’une ou plusieurs chaînes de caractères consécutives entre guillemets.
- rule hex-string-literal
Un littéral de chaîne hexagonale complète qui consiste en une ou plusieurs chaînes hexagonales consécutives.
- rule unicode-string-literal
Un littéral de chaîne unicode complet qui consiste en une ou plusieurs chaînes unicode consécutives.
- rule number-literal
Les littéraux numériques peuvent être des nombres décimaux ou hexadécimaux avec une unité optionnelle.
- rule block
Un bloc d’instructions avec des accolades. Ouvre sa propre portée.
- rule unchecked-block
- rule statement
- rule if-statement
Déclaration If avec partie else facultative.
- rule for-statement
Instruction For avec une partie facultative init, condition et post-boucle.
- rule while-statement
- rule do-while-statement
- rule continue-statement
Une instruction continue. Uniquement autorisé dans les boucles for, while ou do-while.
- rule break-statement
Une instruction break. Uniquement autorisé dans les boucles for, while ou do-while.
- rule try-statement
Une instruction try. L’expression contenue doit être un appel de fonction externe ou une création de contrat.
- rule catch-clause
La clause catch d’une déclaration try.
- rule return-statement
- rule emit-statement
Une instruction emit. L’expression contenue doit faire référence à un événement.
- rule revert-statement
Une déclaration de retour en arrière. L’expression contenue doit faire référence à une erreur.
- rule assembly-statement
Un bloc d’assemblage en ligne. Le contenu d’un bloc d’assemblage en ligne utilise un analyseur/lexeur séparé, c’est-à-dire que l’ensemble des mots-clés et d’identificateurs autorisés est différent à l’intérieur d’un bloc d’assemblage en ligne.
- rule variable-declaration-tuple
Un tuple de noms de variables à utiliser dans les déclarations de variables. Peut contenir des champs vides.
- rule variable-declaration-statement
Une déclaration de variable. Une seule variable peut être déclarée sans valeur initiale, alors qu’un tuple de variables ne peut être déclaré avec une valeur initiale.
- rule expression-statement
- rule mapping-type
- rule mapping-key-type
Seuls les types élémentaires ou les types définis par l’utilisateur sont viables comme clés de mappage.
- rule yul-statement
Une instruction Yul dans un bloc d’assemblage en ligne. Les instructions continue et break ne sont valables que dans les boucles for. Les instructions leave ne sont valables que dans les corps de fonctions.
- rule yul-block
- rule yul-variable-declaration
La déclaration d’une ou plusieurs variables Yul avec une valeur initiale facultative. Si plusieurs variables sont déclarées, seul un appel de fonction constitue une valeur initiale valide.
- rule yul-assignment
Toute expression peut être assignée à une seule variable Yul, alors que les affectations multiples nécessitent un appel de fonction sur le côté droit.
- rule yul-if-statement
- rule yul-for-statement
- rule yul-switch-statement
Une déclaration Yul switch peut consister uniquement en un cas par défaut (déprécié) ou en un ou plusieurs cas non-définis par défaut, éventuellement suivis d’un cas-défini par défaut.
- rule yul-function-definition
- rule yul-path
Alors que seuls les identifiants sans points peuvent être déclarés dans un bloc d’assemblage en ligne, les chemins contenant des points peuvent faire référence à des déclarations en dehors du bloc d’assemblage en ligne.
- rule yul-function-call
Un appel à une fonction avec des valeurs de retour ne peut se produire qu’à droite d’une affectation ou d’une déclaration de variable.
- rule yul-boolean
- rule yul-literal
- rule yul-expression
- lexer grammar SolidityLexer
- rule fixed-bytes
Types d’octets de longueur fixe.
- rule number-unit
Dénomination unitaire pour les nombres.
- rule signed-integer-type
Types d’entiers signés dimensionnés. int est un alias de int256.
- rule unsigned-integer-type
Types d’entiers non signés dimensionnés. uint est un alias de uint256.
- rule non-empty-string-literal
Une chaîne de caractères non vide, entre guillemets, limitée aux caractères imprimables.
- rule empty-string-literal
Une chaîne littérale vide
- rule single-quoted-printable
Tout caractère imprimable, sauf le guillemet simple ou la barre oblique inversée.
- rule double-quoted-printable
Tout caractère imprimable, sauf le guillemet double ou la barre oblique inversée.
- rule escape-sequence
Séquence d’échappement. Outre les séquences d’échappement à un seul caractère, il est possible d’échapper aux sauts de ligne ainsi que les séquences d’échappement unicode à quatre chiffres hexagonaux (uXXXX) et les séquences d’échappement hexagonales à deux chiffres (xXX) sont autorisées.
- rule unicode-string-literal
Un littéral de chaîne de caractères entre guillemets permettant des caractères unicodes arbitraires.
- rule hex-string
Les chaînes hexadécimales doivent être composées d’un nombre pair de chiffres hexadécimaux qui peuvent être groupés à l’aide de caractères de soulignement.
- rule hex-number
Les nombres hexadécimaux se composent d’un préfixe et d’un nombre arbitraire de chiffres hexadécimaux qui peuvent être délimités par des traits de soulignement.
- rule decimal-number
Un littéral de nombre décimal est constitué de chiffres décimaux qui peuvent être délimités par des traits de soulignement et un exposant positif ou négatif facultatif. Si les chiffres contiennent un point décimal, le littéral est de type à virgule fixe.
- rule identifier
Un identifiant dans solidity doit commencer par une lettre, un symbole dollar ou un trait de soulignement et peut en outre contenir des chiffres après le premier symbole.
- rule yul-evm-builtin
Fonctions intégrées dans le dialecte EVM Yul.
- rule yul-identifier
Les identifiants définis par l’utilisateur sont constitués de lettres, de signes de dollar, d’underscores et de chiffres, mais ne peuvent pas commencer par un chiffre. Dans l’assemblage en ligne, il ne peut y avoir de points dans les identificateurs définis par l’utilisateur. Voir plutôt yulPath pour les expressions consistant en des identificateurs avec des points.
- rule yul-hex-number
Les littéraux hexadécimaux dans Yul consistent en un préfixe et un ou plusieurs chiffres hexadécimaux.
- rule yul-decimal-number
Les littéraux décimaux dans Yul peuvent être zéro ou toute séquence de chiffres décimaux sans zéros de tête.
- rule yul-string-literal
Les chaînes de caractères dans Yul consistent en une ou plusieurs chaînes de caractères entre guillemets ou entre guillemets simples qui peuvent contenir des séquences d’échappement et des caractères imprimables, à l’exception des sauts de ligne non encodés ou des des guillemets doubles ou simples non masqués, respectivement.
- rule pragma-token
Jeton de pragmatisme. Peut contenir n’importe quel type de symbole sauf un point-virgule. Notez qu’actuellement l’analyseur de Solidity ne permet qu’un sous-ensemble de ceci.