Compartilhar via


Gramática consolidada

Gramática lexical

unidade-lexical:
      elementos-léxicosopcional
elementos-léxicos:
      elemento-léxico elementos-léxicosopcional
elemento-léxico:
      espaço em branco
      símbolo
      comentário

Espaço em branco

espaço em branco:
      Qualquer caractere com classe Unicode ZS
      Caractere de tabulação horizontal (U+0009)
      Caractere de tabulação vertical (U+000B)
      Caractere de feed de formulário (U+000C)
      Caractere de retorno de carro (U+000D) seguido de caractere de alimentação de linha (U+000A) caractere-de-nova-linha
caractere-de-nova-linha:

      Caractere de retorno de carro (U+000D)
      Caractere de feed de linha (U+000A)
      Caractere de próxima linha (U+0085)
      Caractere separador de linha (U+2028)
      Caractere separador de parágrafo (U+2029)

Comentário

comentário:
      comentário-de-linha-única
      comentário-delimitado

comentário-de-linha-única:
       // caracteresde comentário de linha única opt
caracteres-de-comentário-de-linha-única:
      caractere-de-comentário-de-linha-única caracteres-de-comentário-de-linha-únicaopcional
caracteres-de-comentário-de-linha-única:

      Qualquer caractere Unicode, exceto um caractere-de-nova-linha
comentário-delimitado:

       /* delimitado-comentário-textoopt asteriscos/
texto-de-comentário-delimitado:
      seção-de-comentário-delimitado texto-de-comentário-delimitadoopcional
seção-de-comentário-delimitado:

      /
       asteriscosopcional caracteres-diferentes-de-barra-e-asterisco
asteriscos:

       * asteriscosopt
não-barra-/-ou-asterisco:

      Qualquer caractere Unicode, exceto * ou /

Tokens

símbolo:
      identificador
      palavra-chave
      literal
      operador-ou-pontuador

Sequências de escape de caractere

sequência-de-escape-de-caracteres:
       #( lista de sequências de escape)
lista-de-sequências-de-escape:
      sequência-de-escape-individual
      lista
,de sequência de escape sequência de escape única
sequência-de-escape-individual:
      sequência-de-escape-longa-unicode
      sequência-de-escape-curta-unicode
      sequência-de-escape-de-caractere-de-controle
      escape-escape
sequência-de-escape-longa-unicode:
      dígito-hexadecimal dígito-hexadecimal dígito-hexadecimal dígito-hexadecimal dígito-hexadecimal dígito-hexadecimal dígito-hexadecimal dígito-hexadecimal
sequência-de-escape-curta-unicode:
      dígito-hexadecimal dígito-hexadecimal dígito-hexadecimal dígito-hexadecimal
sequência-de-escape-de-caractere-de-controle:
      caractere-de-controle
caractere-de-controle:

      cr
      lf
      tab
escape-escape:
      #

Literais

literal:
      literal-lógico
      literal-de-número
      literal-de-texto
      literal-nulo
      literal-textual
literal-lógico:
      true
      false
literal-de-número:
      literal-de-número-decimal
      literal-de-número-hexadecimal
dígitos-decimais:
      dígito-decimal dígitos-decimaisopcional
dígito-decimal:
um de
      0 1 2 3 4 5 6 7 8 9
literal-de-número-hexadecimal:
       0x dígitos hexadecimais
       0X dígitos hexadecimais
dígitos-hexadecimais:
      dígito-hexadecimal dígitos-hexadecimaisopcional
digito-hexadecimal:
um de
      0 1 2 3 4 5 6 7 8 9 A B C D E F a b c d e f
literal-de-número-decimal:
      decimal-dígitos
.decimal-dígitos expoente-parteopt
       . decimal-dígitos expoente-parteopt
      dígitos-decimais parte-do-expoenteopcional
parte-do-expoente:

       e dígitos decimais de opção de sinal
       E dígitos decimais de opção de sinal
conectar:
um de
      + -
literal-de-texto:
       " caracteresliterais de texto optam"
caracteres-de-literal-de-texto:
      caractere-de-literal-de-texto caracteres-de-literal-de-textoopcional
caractere-de-literal-de-texto:
      caractere-de-texto-individual
      sequência-de-escape-de-caracteres
      sequência-de-escape-com-aspas-duplas
caractere-de-texto-individual:

      Qualquer caractere, exceto " (U+0022) ou # (U+0023) seguido por ( (U+0028)
sequência-de-escape-com-aspas-duplas:
       "" (U+0022, U+0022)
literal-nulo:
      null
literal-textual:
       #!" caracteresliterais de texto optam"

Identificadores

identificador:
      identificador-comum
      identificador-entre-aspas
identificador-comum:
      identificador-disponível
      identificador-disponível caractere-de-ponto identificador-comum
identificador-disponível:

      Uma palavra-chave-ou-identificador que não é uma palavra-chave
palavra-chave-ou-identificador:
      caractere-de-letra
      caractere-de-sublinhado
      caractere-de-início-de-identificador caracteres-de-parte-de-identificador
caractere-de-início-de-identificador:
      caractere-de-letra
      caractere-de-sublinhado
caracteres-de-parte-de-identificador:
      caractere-de-parte-identificadora caracteres-de-parte-identificadoraopcional
caractere-de-parte-de-identificador:
      caractere-de-letra
      caractere-de-dígito-decimal
      caractere-de-sublinhado
      caractere-de-conexão
      caractere-de-combinação
      caractere-de-formatação
identificador-generalizado:
      parte-de-identificador-generalizado
      identificador-generalizado
separado somente por espaços em branco (U+0020) parte-do-identificador-generalizado
parte-de-identificador-generalizado:
      segmento-de-identificador-generalizado
      caractere-de-dígito-decimal segmento-de-identificador-generalizado
segmento-de-identificador-generalizado:
      palavra-chave-ou-identificador
      palavra-chave-ou-identificador caractere-de-ponto palavra-chave-ou-identificador
caractere de ponto:

       . (U+002E)
caractere-de-sublinhado:
       _ (U+005F)
caractere-de-letra:_
      Um caractere Unicode de uma das classes Lu, Ll, Lt, Lm, Lo ou Nl
caractere-de-combinação:
      Um caractere Unicode de uma das classes Mn ou Mc
caractere-de-dígito-decimal:
      Um caractere Unicode da classe Nd
caractere-de-conexão:
      Um caractere Unicode da classe Pc
caractere-de-formatação:
      Um caractere Unicode da classe Cf
identificador-entre-aspas:
       #" caracteresliterais de texto optam"

Palavras-chave e identificadores predefinidos

Palavras-chave e identificadores predefinidos não podem ser redefinidos. Um identificador entre aspas pode ser usado para lidar com identificadores que, de outra forma, colidiriam com identificadores ou palavras-chave predefinidos.

palavra-chave: uma de
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

Operadores e pontuadores

operador-ou-pontuador: um entre
      , ; = < <= > >= <> + - * / & ( ) [ ] { } @ ? ?? => .. ...

Gramática sintática

Documentos

documento:
      documento-de-seção
      documento-de-expressão

Documentos da seção

documento-de-seção:
      section
seção:
      atributos literais
sectionnome;da seção membrosda seção opt
nome-da-seção:
      identificador
membros-da-seção:
      membro-da-seção membros-da-seçãoopcional
membro-da-seção:
      literal-attributesopt sharedopt expressão de nome=de membro da seção
;
nome-do-membro-da-seção:
      identificador

Documentos de expressão

Expressões

documento-de-expressão:
      expressão
expressão:
      expressão-or-lógica
expressão-de-cada
      expressão-de-função
      expressão-let
      expressão-if
      expressão-para-geração-de-erros
      expressão-de-tratamento-de-erro

Expressões lógicas

expressão-OR-lógica:
      expressão-AND-lógica
      lógica e expressão
orlógica ou expressão
expressão-AND-lógica:
      expressão-is
      lógica e expressão
andé expressão

Expressão Is

expressão-is:
      expressão-as
      is-expression
isprimitive-or-nullable-primitive-type

Expressão As

expressão-as:
      expressão de igualdade
      as-expression
asprimitive-or-nullable-primitive-type

Expressão de igualdade

expressão-de-igualdade:
      relational-expression
      expressão de igualdade de expressão
=relacional
      expressãode igualdade de expressão
<> relacional

Expressão relacional

expressão-relacional:
      additive-expression
      expressão relacional de expressão
<aditiva
      expressão relacional de expressão
>aditiva
      expressão relacional de expressão
<=aditiva
      expressãorelacional de expressão
>= aditiva

Expressões aritméticas

expressão-de-adição:
      multiplicative-expression
      expressão
+multiplicativa expressão aditiva
      expressão
-multiplicativa expressão aditiva
      expressão
& multiplicativa _additive expressão
expressão-multiplicadora:
      expressão-de-metadados
      expressão de
*metadados expressão multiplicativa
      expressão de
/metadados expressão multiplicativa

Expressão de metadados

expressão-de-metadados:
      {1>unary-expression<1}
      unary-expression
metaunary-expression

Expressão unária

expressão-unária:
      expressão-de-tipo

       + expressão unária
       - expressão unária
       not expressão unária

Expressão primária

expressão-primária:
      expressão-de-literal
      expressão-de-lista
      expressão-de-registro
      expressão-de-identificador
      expressão-de-acesso-à-seção
      expressão-entre-parênteses
      expressões-de-acesso-ao-campo
      expressão-de-acesso-ao-item
      expressão-de-invocação
      expressão-not-implementada

Expressão literal

expressão-de-literal:
      literal

Expressão de identificador

expressão-de-identificador:
      referência-de-identificador
referência-de-identificador:
      referência-de-identificador-exclusiva
      referência-de-identificador-inclusiva
referência-de-identificador-exclusiva:
      identificador
referência-de-identificador-inclusiva:

       @ identificador

Expressão de acesso à seção

expressão-de-acesso-à-seção:
      
! identificador identificador

Expressão entre parênteses

expressão-entre-parênteses:
       ( expressão)

Expressão não implementada

expressão-não-implementada:
      ...

Expressão de invocação

expressão-de-invocação:
      opção de lista de argumentos de expressão
(primária)
lista-de-argumentos:
      expressão
      lista de argumentos de expressão
,

Expressão de lista

expressão-de-lista:
       { opção de listade itens}
lista-de-itens:
      item
      lista de itens de itens
,
item:
      expressão
      expressão
..expressão

Expressão de registro

expressão-de-registro:
       [ opção de listade campos]
lista-de-campos:
      campo
      campo
,lista de campos
campo:
      expressão de nome
=de campo
nome-do-campo:
      identificador-generalizado
      identificador-entre-aspas

Expressão de acesso ao item

expressão-de-acesso-ao-item:
      seleção-de-item
      seleção-de-item-opcional
seleção de item:
seletor de item de expressão
{primária }
seleção-de-item-opcional:
       seletor de item de expressão
{ primária} ?
seletor-de-item:
      expressão

Expressões de acesso ao campo

expressão-de-acesso-ao-campo:
      seleção-de-campo
      seleção-de-campo-de-destino-implícito
      projeção
      projeção-de-destino-implícito
seleção-de-campo:
      expressão-primária seletor-de-campo
seletor-de-campo:
      seletor-de-campo-obrigatório
      seletor-de-campo-opcional
seletor-de-campo-obrigatório:

       [ nome do campo]
seletor-de-campo-opcional:
       [ nome do campo] ?
seleção-de-campo-de-destino-implícito:
      seletor-de-campo
projeção:
      expressão-primária projeção-obrigatória
      expressão-primária projeção-opcional
projeção-necessária:_
       [ required-selector-list]
projeção-opcional:
       [ required-selector-list] ?
lista-de-seletores-obrigatórios:
      seletor-de-campo-obrigatório
      seletor
,de campo obrigatório lista de seletores obrigatórios
projeção-de-destino-implícito:
      projeção-obrigatória
      projeção-opcional

Expressão de função

expressão-de-função:
       ( listade parâmetros opt)return-typeopt=>function-body
corpo-da-função:
      expressão
lista-de-parâmetros:
      lista-de-parâmetros-fixos
      lista
,de parâmetros fixos lista de parâmetros opcionais
      lista-de-parâmetros-opcionais
lista-de-parâmetros-fixos:
      parâmetro
      parâmetro
,lista de parâmetros fixos
parameter:
       opção de parâmetro de nome do parâmetro
nome-do-parâmetro:
      identificador
tipo-de-parâmetro:
      primitive-or-nullable-primitive-type-assertion
tipo-de-retorno:
      primitive-or-nullable-primitive-type-assertion
primitive-or-nullable-primitive-type-assertion:

       as primitive-or-nullable-primitive-type
lista-de-parâmetros-opcionais:
      parâmetro-opcional
      parâmetro-opcional
,lista-de-parâmetros-opcionais
parâmetro-opcional:

       optional parâmetro

Expressão each

expressão-each:
       each cada corpo de expressão
corpo-da-expressão-each:
      corpo-da-função

Expressão let

expressão-let:
       let expressão de listainde variáveis
lista-de-variáveis:
      variável
      lista de variáveis variáveis
,
variable:
      expressão de nome
=de variável
nome-da-variável:
      identificador

Expressão if

expressão-if:
       if Condição-sethenexpressãoelseverdadeira expressão falsa
condição-if:
      expressão
expressão-true:
      expressão
expressão-false:
      expressão

Expressão de tipo

expressão-de-tipo:
      expressão-primária

       type tipo primário
type:
      primary-expression
      tipo-primário
tipo-primário:
      primitive-or-nullable-primitive-type
      tipo-de-registro
      tipo-de-lista
      tipo-de-função
      tipo-de-tabela
      tipo anulável

primitive-or-nullable-primitive-type:
       nullable opcional tipo-primitivo
tipo primitivo: um dos
      any anynonnull binary date datetime datetimezone duration function list logical
      none null number record table text time type
tipo-de-registro:
       [ aberto-marcador de registro]
       [ opção de listade especificação de campo]
       [ lista,de especificações de campo abrir marcador de registro]
lista-de-especificações-de-campo:
      especificação-do-campo
      lista de especificações de campo de especificação
,de campo
especificação-do-campo:

       optional opc nome-do-campo especificação-de-tipo-de-campoopc
especificação-de-tipo-de-campo:

       = tipo de campo
tipo-de-campo:
      tipo
marcador-de-registro-aberto:

      ...
tipo-de-lista:
       { tipo de item}
tipo-de-item:
      tipo
tipo-de-função:

       function ( listade especificações de parâmetros opt)return-type
lista-de-especificação-de-parâmetros:
      lista-de-especificação-de-parâmetros-exigidos
      lista
,de especificações de parâmetros obrigatórios lista de especificações de parâmetros opcionais
      lista-de-especificação-de-parâmetros-opcionais
lista-de-especificação-de-parâmetros-exigidos:
      especificação-de-parâmetros-exigidos
      especificação-de-parâmetro-obrigatório
,lista-de-especificações-de-parâmetros-obrigatórios
especificação-de-parâmetros-exigidos:
      especificação-de-parâmetros
lista-de-especificação-de-parâmetros-opcionais:
      especificação-de-parâmetros-opcionais
      optional-parameter-specification
,lista de especificações de parâmetros opcionais
especificação-de-parâmetros-opcional:

       optional especificação de parâmetro
especificação-de-parâmetros:
      nome-do-parâmetro tipo-de-parâmetro
tipo-de-parâmetro:
      type-assertion
type-assertion:

       as tipo
tipo-de-tabela:

       table tipo de linha
tipo-de-linha:

       [ opção de listade especificação de campo]
tipo-anulável:
       nullable tipo

Expressão para geração de erros

expressão-para-geração-de-erros:
       error expressão_

Expressão de tratamento de erro

expressão-de-tratamento-de-erro:
       try expressão protegida opção de manipuladorde erros
expressão-protegida:
      expressão
error-handler:
      otherwise-clause
      catch-clause
cláusula-otherwise:

       otherwise expressão padrão
default-expression:
       expressão
catch-clause:
       catch função catch-
catch-function:
       ( ) => function-body

Atributos literais

atributos-de-literal:
      literal-de-registro
literal-de-registro:

       [ opção de listade campos literais ]
lista-de-campos-de-literal:
      campo-de-literal
      lista
,de campos literais
campo-de-literal:
      nome
=do campo qualquer literal
literal-de-lista:

       { opção de listade itens literais }
lista-de-itens-literais:
      qualquer-literal
      qualquer-literal-lista-de-itens-literais
,
literal-qualquer:
      literal-de-registro
      literal-de-lista
      literal-lógico
      literal-de-número
      literal-de-texto
      literal-nulo