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
      token
      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

token:
      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 literaisoptsectionnome;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
or ló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
is nullable-primitive-type
tipo-primitivo-que-permite-valor-nulo:

      nullableopcional tipo-primitivo

Expressão As

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

Expressão de igualdade

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

Expressão relacional

expressão-relacional:
      additive-expression
      additive-expression
< relational-expression
      additive-expression
> relational-expression
      additive-expression
<= relational-expression
      additive-expression
>= relational-expression

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
meta unary-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:
      field
      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:
      primary-expression
{ item-selector } ?
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:

      [ field-name ]
seletor-de-campo-opcional:
      [ field-name ] ?
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:
      parameter-name primitive-parameter-typeopt
nome-do-parâmetro:
      identifier
primitive-parameter-type:
      primitive-assertion
tipo-de-retorno:
      primitive-assertion
primitive-assertion:

      as tipo primitivo anulável
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:
      eachcada corpo de expressão
corpo-da-expressão-each:
      corpo-da-função

Expressão let

expressão-let:
      let expressão de lista in de 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:
      ifCondiçã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:
      tipo-primitivo
      tipo-de-registro
      tipo-de-lista
      tipo-de-função
      tipo-de-tabela
      tipo-que-permite-valor-nulo
tipo-primitivo:
um de
      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:

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

      optionalespecificação de parâmetro
especificação-de-parâmetros:
      nome-do-parâmetro tipo-de-parâmetro
tipo-de-parâmetro:
      assertion
declaração:

      astipo
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:
      tryexpressão protegida opção de manipuladorde erros
expressão-protegida:
      expressão
error-handler:
      otherwise-clause
      catch-clause
cláusula-otherwise:

      otherwiseexpressão padrão
default-expression:
      expressão
catch-clause:
      catchfunção catch-
catch-function:
      (nomedo parâmetro opt=>) 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