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:
      0xhex-digits
      0Xhex-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 :

      esignopt decimal-digits
      Esignopt 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 suivantes
and 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-attributesopt
sectionsection-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-expression
orlogical-or-expression
logical-and-expression :
      is-expression
      logical-and-expression
andis-expression

Expression is

is-expression :
      as-expression
      is-expression
isnullable-primitive-type
nullable-primitive-type :

      nullableopt primitive-type

Expression as

as-expression :
      equality-expression
      as-expression
asnullable-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
metaunary-expression

Expression unaire

unary-expression :
      type-expression

      +unary-expression
      -unary-expression
      notunary-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:

      asnullable-primitive-type
optional-parameter-list :
      optional-parameter
      optional-parameter
,optional-parameter-list
optional-parameter :

      optionalparameter

Expression each

each-expression:
      eacheach-expression-body
each-expression-body :
      function-body

Expression let

let-expression:
      letvariable-listinexpression
variable-list :
      variable
      variable
,variable-list
variable :
      variable-name
=expression
variable-name :
      identifier

Expression if

if-expression:
      ifif-conditionthentrue-expressionelsefalse-expression
if-condition :
      expression
true-expression :
      expression
false-expression :
      expression

Expression de type

type-expression :
      primary-expression

      typeprimary-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 :

      optionalopt 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 :

      optionalparameter-specification
parameter-specification :
      parameter-name parameter-type
parameter-type :
      assertion
assertion :

      astype
table-type :

      tablerow-type
row-type :

      [field-specification-listopt]
nullable-type:
      nullabletype

Expression de déclenchement des erreurs

error-raising-expression:
      error expression_

Expression de gestion des erreurs

error-handling-expression:
      tryprotected-expression error-handleropt
protected-expression:
      expression
error-handler :
      otherwise-clause
      catch-clause
otherwise-clause :

      otherwisedefault-expression
default-expression :
      expression
catch-clause :
      catchcatch-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