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 :
//
single-line-comment-charactersopt
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 :
*
asterisksopt
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
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
hex-digits
0X
hex-digits
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 :
literal-attributesoptsection
section-name;
section-membersopt
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-expressionor
logical-or-expression
logical-and-expression :
is-expression
logical-and-expressionand
is-expression
Expression is
is-expression :
as-expression
is-expressionis
nullable-primitive-type
nullable-primitive-type :
nullable
opt primitive-type
Expression as
as-expression :
equality-expression
as-expressionas
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-expressionmeta
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 :
@
identifier
Expression d’accès aux sections
section-access-expression :
identifier!
identifier
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,
item-list
item :
expression
expression..
expression
Expression d’enregistrement
record-expression:
[
field-listopt]
field-list :
field
field,
field-list
field :
field-name=
expression
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
parameter
Expression each
each-expression:
each
each-expression-body
each-expression-body :
function-body
Expression let
let-expression:
let
variable-listin
expression
variable-list :
variable
variable,
variable-list
variable :
variable-name=
expression
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
primary-type
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,
field-specification-list
field-specification :
optional
opt field-name field-type-specificationopt
field-type-specification :
=
field-type
field-type :
type
open-record-marker :
...
list-type:
{
item-type}
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
row-type
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 :
[
literal-field-listopt]
literal-field-list :
literal-field
literal-field,
literal-field-list
literal-field :
field-name=
any-literal
list-literal :
{
literal-item-listopt}
literal-item-list :
any-literal
any-literal,
literal-item-list
any-literal :
record-literal
list-literal
logical-literal
number-literal
text-literal
null-literal