Grammaire centralisée
Grammaire lexicale
lexical-unit :
lexical-elementsopt
lexical-elements :
lexical-element lexical-elementsopt
lexical-element :
whitespace
token
comment
Espace blanc
whitespace:
Tout caractère avec la classe Unicode Zs
Caractère de tabulation horizontale (U+0009
)
Caractère de tabulation verticale (U+000B
)
Caractère de saut de page (U+000C
)
Caractère de retour chariot (U+000D
) suivi du caractère de saut de ligne (U+000A
) new-line-character
new-line-character :
Caractère de retour chariot (U+000D
)
Caractère de saut de ligne (U+000A
)
Caractère de ligne suivante (U+0085
)
Caractère de séparateur de lignes (U+2028
)
Caractère de séparateur de paragraphes (U+2029
)
Commentaire
comment :
single-line-comment
delimited-comment
single-line-comment :
//
opt-single-line-comment-characters
single-line-comment-characters :
single-line-comment-character single-line-comment-charactersopt
single-line-comment-character :
Tout caractère Unicode sauf un new-line-character
delimited-comment :
/*
delimited-comment-textopt asterisks /
delimited-comment-text :
delimited-comment-section delimited-comment-textopt
delimited-comment-section :
/
asterisksopt not-slash-or-asterisk
asterisks :
*
astérisquesoptent
not-slash-or-asterisk :
Tout caractère Unicode sauf *
ou /
Jetons
token :
identificateur
mot clé
littéral
operator-or-punctuator
Séquences d’échappement de caractère
character-escape-sequence:
#(
escape-sequence-list )
escape-sequence-list:
single-escape-sequence
escape-sequence-list ,
single-escape-sequence-sequence
single-escape-sequence :
long-unicode-escape-sequence
short-unicode-escape-sequence
control-character-escape-sequence
escape-escape
long-unicode-escape-sequence :
hex-digit hex-digit hex-digit hex-digit hex-digit hex-digit hex-digit hex-digit
short-unicode-escape-sequence :
hex-digit hex-digit hex-digit hex-digit
control-character-escape-sequence :
control-character
control-character :
cr
lf
tab
escape-escape:
#
Littéraux
literal :
logical-literal
number-literal
text-literal
null-literal
verbatim-literal
logical-literal:
true
false
number-literal :
decimal-number-literal
hexadecimal-number-literal
decimal-digits :
decimal-digit decimal-digitsopt
decimal-digit : une des valeurs suivantes
0 1 2 3 4 5 6 7 8 9
hexadecimal-number-literal:
0x
chiffres hexadécimaux
0X
chiffres hexadécimaux
hex-digits :
hex-digit hex-digitsopt
hex-digit : une des valeurs suivantes
0 1 2 3 4 5 6 7 8 9 A B C D E F a b c d e f
decimal-number-literal :
decimal-digits decimal-digits.
exponent-partopt
.
decimal-digits exponent-partopt
decimal-digits exponent-partopt
exponent-part :
e
signopt decimal-digits
E
signopt decimal-digits
sign : une des valeurs suivantes
+ -
text-literal:
"
text-literal-charactersopt "
text-literal-characters :
text-literal-character text-literal-charactersopt
text-literal-character :
single-text-character
character-escape-sequence
double-quote-escape-sequence
single-text-character :
Tout caractère sauf "
(U+0022
) ou #
(U+0023
) suivi de (
(U+0028
)
double-quote-escape-sequence:
""
(U+0022
, U+0022
)
null-literal:
null
verbatim-literal:
#!"
text-literal-charactersopt "
Identificateurs
identifier :
regular-identifier
quoted-identifier
regular-identifier :
available-identifier
available-identifier dot-character regular-identifier
available-identifier :
keyword-or-identifier qui n’est pas un keyword
keyword-or-identifier :
letter-character
underscore-character
identifier-start-character identifier-part-characters
identifier-start-character :
letter-character
underscore-character
identifier-part-characters :
identifier-part-character identifier-part-charactersopt
identifier-part-character :
letter-character
decimal-digit-character
underscore-character
connecting-character
combining-character
formatting-character
generalized-identifier :
generalized-identifier-part
generalized-identifier séparés uniquement par des espaces (U+0020
) generalized-identifier-part
generalized-identifier-part :
generalized-identifier-segment
decimal-digit-character generalized-identifier-segment
generalized-identifier-segment :
keyword-or-identifier
keyword-or-identifier dot-character keyword-or-identifier
dot-character :
.
(U+002E
)
underscore-character:
_
(U+005F
)
letter-character:_
Caractère Unicode des classes Lu, Ll, Lt, Lm, Lo ou Nl
combining-character:
Caractère Unicode des classes Mn ou Mc
decimal-digit-character:
Caractère Unicode de la classe Nd
connecting-character:
Caractère Unicode de la classe Pc
formatting-character:
Caractère Unicode de la classe Cf
quoted-identifier:
#"
text-literal-charactersopt "
Identificateurs prédéfinis et mots clés
Les identificateurs prédéfinis et les mots clés ne peuvent pas être redéfinis. Un identificateur entre guillemets peut être utilisé pour gérer des identificateurs qui, autrement, entreraient en conflit avec des identificateurs prédéfinis ou des mots clés.
keyword : une des valeurs suivantesand as each else error false if in is let meta not null or otherwise
section shared then true try type #binary #date #datetime
#datetimezone #duration #infinity #nan #sections #shared #table #time
Opérateurs et signes de ponctuation
operator-or-punctuator : un parmi
, ; = < <= > >= <> + - * / & ( ) [ ] { } @ ? ?? => .. ...
Grammaire syntaxique
Documents
document :
section-document
expression-document
Documents de section
section-document :
section
section :
littéral-attributesoptsection
section-name;
section-members opt
section-name :
identificateur
section-members :
section-member section-membersopt
section-member :
literal-attributesopt sharedopt section-member-name =
expression ;
section-member-name :
identifier
Documents d’expression
Expressions
expression-document :
expression
expression :
logical-or-expression
each-expression
function-expression
let-expression
if-expression
error-raising-expression
error-handling-expression
Expressions logiques
logical-or-expression :
logical-and-expression
logical-and-expression or
logical-or-expression
logical-and-expression :
is-expression
logical-and-expression is-expressionand
Expression is
is-expression :
as-expression
is-expression is
nullable-primitive-type
nullable-primitive-type :
nullable
opt primitive-type
Expression as
as-expression :
equality-expression
as-expression as
nullable-primitive-type
Expression d’égalité
equality-expression :
relational-expression
relational-expression =
equality-expression
relational-expression <>
equality-expression
Expression relationnelle
relational-expression :
expression-additive
additive-expression <
relational-expression
additive-expression >
relational-expression
additive-expression <=
relational-expression
additive-expression >=
relational-expression
Expressions arithmétiques
additive-expression :
multiplicative-expression
multiplicative-expression +
additive-expression
multiplicative-expression -
additive-expression
multiplicative-expression &
_additive-expression
multiplicative-expression :
metadata-expression
metadata-expression *
multiplicative-expression
metadata-expression /
multiplicative-expression
Expression de métadonnées
metadata-expression :
unary-expression
unary-expression meta
unary-expression
Expression unaire
unary-expression :
type-expression
+
unary-expression
-
unary-expression
not
unary-expression
Expression primaire
primary-expression :
literal-expression
list-expression
record-expression
identifier-expression
section-access-expression
parenthesized-expression
field-access-expression
item-access-expression
invoke-expression
not-implemented-expression
Expression littérale
literal-expression :
literal
Expression d’identificateur
identifier-expression :
identifier-reference
identifier-reference :
exclusive-identifier-reference
inclusive-identifier-reference
exclusive-identifier-reference :
identificateur
inclusive-identifier-reference :
@
identificateur
Expression d’accès aux sections
section-access-expression :
identificateur d’identificateur !
Expression entre parenthèses
parenthesized-expression :
(
expression )
Expression non implémentée
not-implemented-expression:
...
Expression d’appel
invoke-expression :
primary-expression (
argument-listopt )
argument-list :
expression
expression ,
argument-list
Expression de liste
list-expression:
{
item-listopt }
item-list :
item
item-list,
item :
expression
expression d’expression..
Expression d’enregistrement
record-expression:
[
field-listopt ]
field-list :
champ
champ ,
de liste de champs
field :
expression de nom =
de champ
field-name :
generalized-identifier
quoted-identifier
Expression d’accès aux éléments
item-access-expression :
item-selection
optional-item-selection
item-selection :
primary-expression {
item-selector }
optional-item-selection :
primary-expression {
item-selector } ?
item-selector :
expression
Expressions d’accès aux champs
field-access-expression :
field-selection
implicit-target-field-selection
projection
implicit-target-projection
field-selection :
primary-expression field-selector
field-selector :
required-field-selector
optional-field-selector
required-field-selector :
[
field-name ]
optional-field-selector:
[
field-name ] ?
implicit-target-field-selection :
field-selector
projection :
primary-expression required-projection
primary-expression optional-projection
required-projection:_
[
required-selector-list ]
optional-projection:
[
required-selector-list ] ?
required-selector-list :
required-field-selector
required-field-selector ,
required-selector-list
implicit-target-projection :
required-projection
optional-projection
Expression de fonction
function-expression:
(
parameter-listopt)
return-typeopt=>
function-body
function-body :
expression
parameter-list :
fixed-parameter-list
fixed-parameter-list ,
optional-parameter-list
optional-parameter-list
fixed-parameter-list :
paramètre
parameter ,
fixed-parameter-list
parameter :
parameter-name primitive-parameter-typeopt
parameter-name :
identifier
primitive-parameter-type:
primitive-assertion
return-type :
primitive-assertion
primitive-assertion:
as
Nullable-primitive-type
optional-parameter-list :
optional-parameter
optional-parameter ,
optional-parameter-list
optional-parameter :
optional
paramètre
Expression each
each-expression:
each
each-expression-body
each-expression-body :
function-body
Expression let
let-expression:
let
expression de liste in
de variables
variable-list :
variable
variable-list,
variable :
expression de nom =
de variable
variable-name :
identifier
Expression if
if-expression:
if
if-conditionthen
true-expressionelse
false-expression
if-condition :
expression
true-expression :
expression
false-expression :
expression
Expression de type
type-expression :
primary-expression
type
type principal
type :
primary-expression
primary-type
primary-type :
primitive-type
record-type
list-type
function-type
table-type
nullable-type
primitive-type : une des valeurs suivantes
any anynonnull binary date datetime datetimezone duration function
list logical none null number record table text time type
record-type:
[
open-record-marker ]
[
field-specification-listopt ]
[
field-specification-list ,
open-record-marker ]
field-specification-list :
field-specification
field-specification-specification-list,
field-specification :
optional
opt field-name field-type-specificationopt
field-type-specification :
=
type de champ
field-type :
type
open-record-marker :
...
list-type:
{
type d’élément }
item-type :
type
function-type :
function (
parameter-specification-listopt)
return-type
parameter-specification-list :
required-parameter-specification-list
required-parameter-specification-list ,
optional-parameter-specification-list
optional-parameter-specification-list
required-parameter-specification-list :
required-parameter-specification
required-parameter-specification ,
required-parameter-specification-list
required-parameter-specification :
parameter-specification
optional-parameter-specification-list :
optional-parameter-specification
optional-parameter-specification ,
optional-parameter-specification-list
optional-parameter-specification :
optional
parameter-specification
parameter-specification :
parameter-name parameter-type
parameter-type :
assertion
assertion :
as
type
table-type :
table
type de ligne
row-type :
[
field-specification-listopt ]
nullable-type:
nullable
type
Expression de déclenchement des erreurs
error-raising-expression:
error
expression_
Expression de gestion des erreurs
error-handling-expression:
try
protected-expression error-handleropt
protected-expression:
expression
error-handler :
otherwise-clause
catch-clause
otherwise-clause :
otherwise
default-expression
default-expression :
expression
catch-clause :
catch
catch-function
catch-function :
(
parameter-nameopt=>
)
function-body
Attributs littéraux
literal-attributes :
record-literal
record-literal :
[
littéral-field-listopt ]
literal-field-list :
literal-field
littéral-champ ,
littéral-field-list
literal-field :
nom_champ n’importe =
quel littéral
list-literal :
{
littéral-item-listopt }
literal-item-list :
any-literal
n’importe quel littéral littéral-item-list ,
any-literal :
record-literal
list-literal
logical-literal
number-literal
text-literal
null-literal