Partilhar via


Gramática consolidada

Gramática lexical

unidade lexical:
      Os elementosléxicos optam
elementos-lexicais:
      lexical-elemento-lexical-elementosopt
elemento-lexical:
      espaço em branco
      token
      comentar

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 alimentação 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 alimentação de linha (U+000A)
      Caractere da 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
      delimitado-comentário

comentário de linha única:
      // optam por caracteresde comentário de linha única
caracteres de comentário de linha única:
      single-line-comment-character single-line-comment-charactersopt
caractere de comentário de linha única:

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

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

      /
      asteriscosoptam não-barra-ou-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 fuga de personagens

caractere-fuga-sequência:
      #( escape-sequence-list )
escape-sequence-list:
      sequência de fuga única
      escape-sequence-list
, single-escape-sequence
sequência de escape único:
      long-unicode-escape-sequence
      curto-unicode-escape-sequence
      controle-caractere-fuga-sequência
      fuga-fuga
long-unicode-escape-sequence:
      hex-dígito hex-dígito hex-dígito hex-dígito hex-dígito hex-dígito hex-dígito
curto-unicode-escape-sequence:
      hex-digit hex-digit hex-digit hex-digit
controle-caractere-fuga-sequência:
      Caráter de controle
Caráter de controle:

      cr
      lf
      tab
fuga-fuga:
      #

Literais

literal:
      lógico-literal
      número-literal
      texto-literal
      nulo-literal
      verbatim-literal
lógico-literal:
      true
      false
número-literal:
      decimal-número-literal
      hexadecimal-número-literal
dígitos decimais:
      Os dígitos decimaisoptam por
dígito decimal:
um dos
      0 1 2 3 4 5 6 7 8 9
hexadecimal-número-literal:
      0x dígitos hexadecimais
      0X dígitos hexadecimais
dígitos hexadecimais:
      hex-digit hex-digitsopt
hex-digit:
um dos
      0 1 2 3 4 5 6 7 8 9 A B C D E F a b c d e f
decimal-número-literal:
      decimais dígitos
.decimal expoente parte opt
      . parte expoentede dígitos decimais opt
      parte expoentede dígitos decimais opt
parte expoente:

      e assinaropt decimal-digits
      E assinaropt decimal-digits
sinal:
um dos
      + -
texto-literal:
      " texto-literal-caracteresopt "
texto-literal-caracteres:
      texto-literal-caractere texto-literal-caracteresopt
texto-literal-caractere:
      caractere de texto único
      caractere-fuga-sequência
      seqüência de fuga de aspas duplas
caractere de texto único:

      Qualquer caractere, exceto " (U+0022) ou # (U+0023) seguido de ( (U+0028)
seqüência de fuga de aspas duplas:
      "" (U+0022, U+0022)
literal nulo:
      null
verbatim-literal:
      #!"texto-literal-caracteresopt "

Identifiers

identificador:
      identificador regular
      identificador cotado
identificador regular:
      identificador disponível
      available-identifier dot-character regular-identifier
identificador disponível:

      Uma palavra-chave ou identificador que não é uma palavra-chave
palavra-chave ou identificador:
      letra-caractere
      sublinhado-caráter
      identificador-início-caractere identificador-part-caracteres
identificador-início-caractere:
      letra-caractere
      sublinhado-caráter
caracteres-parte-identificador:
      identificador-parte-caractere identificador-parte-caracteresopt
identificador-part-character:
      letra-caractere
      caracteres de dígito decimal
      sublinhado-caráter
      caractere de conexão
      caractere de combinação
      caractere de formatação
identificador generalizado:
      generaled-identifier-part
      identificador
generalizado separado apenas por espaços em branco (U+0020) generaled-identifier-part
generaled-identifier-part:
      generaled-identifier-segment
      decimal-digit-caractere-generaled-identifier-segment
generaled-identifier-segment:
      palavra-chave ou identificador
      palavra-chave ou identificador ponto-caractere palavra-chave ou-identificador
caractere-ponto:

      . (U+002E)
sublinhado-caráter:
      _ (U+005F)
caractere-letra:_
      Um caractere Unicode das classes Lu, Ll, Lt, Lm, Lo ou Nl
Combinação-caráter:
      Um caractere Unicode das classes Mn ou Mc
caractere de dígito decimal:
      Um caractere Unicode da classe Nd
Caráter de conexão:
      Um caractere Unicode da classe Pc
caractere de formatação:
      Um caractere Unicode da classe Cf
citado-identificador:
      #" texto-literal-caracteresopt "

Palavras-chave e identificadores predefinidos

Identificadores e palavras-chave 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: um dos
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 dos
      , ; = < <= > >= <> + - * / & ( ) [ ] { } @ ? ?? => .. ...

Gramática sintática

Documentos

documento:
      secção-documento
      documento-expressão

Documentos da Secção

secção-documento:
      section
secção:
      literal-attributesopt
sectionsection-name section-members opt;
nome da secção:
      identificador
Membros da secção:
      membros da secção-membrosda secção optam
Membro da secção:
      literal-attributes opt shared opt section-member-name=
expression ;
nome-membro-secção:
      identificador

Documentos de expressão

Expressões

documento-expressão:
      expressão
Expressão:
      lógica-ou-expressão
cada expressão
      função-expressão
      let-expression
      se-expressão
      expressão de aumento de erro
      erro-manipulação-expressão

Expressões lógicas

lógica-ou-expressão:
      lógica-e-expressão
      lógica-e-expressão
or lógica-ou-expressão
lógica-e-expressão:
      é-expressão
      lógico-e-expressão
and é-expressão

É expressão

é-expressão:
      como-expressão
      is-expression
is nullable-primitive-type
nullable-primitive-type:

      nullable opt primitivo-tipo

Como expressão

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

Expressão da igualdade

igualdade-expressão:
      expressão-relacional
      relacional-expressão
= igualdade-expressão
      relacional-expressão
<> igualdade-expressão

Expressão relacional

expressão-relacional:
      expressão-aditiva
      expressão-aditiva-relacional-expressão
<
      expressão-aditiva-relacional-expressão
>
      expressão-aditiva-relacional-expressão
<=
      expressão-aditiva-relacional-expressão
>=

Expressões aritméticas

expressão-aditiva:
      Expressão multiplicativa
      expressão multiplicativa-expressão
+ aditiva
      expressão multiplicativa-expressão
- aditiva
      multiplicativa-expressão
& _additive-expressão
Expressão multiplicativa:
      metadados-expressão
      metadados-expressão
* multiplicativa-expressão
      metadados-expressão
/ multiplicativa-expressão

Expressão de metadados

expressão de metadados:
      unário-expressão
      unary-expression
meta unary-expression

Expressão unária

unário-expressão:
      tipo-expressão

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

Expressão primária

expressão-primária:
      expressão literal
      Expressão-lista
      recordação-expressão
      Expressão-identificador
      seção-acesso-expressão
      expressão entre parênteses
      campo-acesso-expressão
      item-access-expression
      invocar-expressão
      expressão não implementada

Expressão literal

literal-expressão:
      Literal

Expressão do identificador

expressão-identificador:
      Referência-identificador
Referência-identificador:
      exclusive-identifier-reference
      inclusive-identifier-reference
exclusive-identifier-reference:
      identificador
inclusive-identifier-reference:

      @ identificador

Expressão de acesso à seção

seção-acesso-expressã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:
      ...

Invocar expressão

invocar-expressão:
      opt pela lista de argumentos de expressão
(primária )
lista de argumentos:
      expressão
      expression
, argument-list

Expressão de lista

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

Gravar expressão

record-expressão:
      [ opt pela listade campos ]
lista de campos:
      campo
      lista de campos
,
domínio:
      expressão de nome
= de campo
nome do campo:
      identificador generalizado
      identificador cotado

Expressão de acesso ao item

item-access-expression:
      seleção de itens
      opcional-item-seleção
seleção de item:
seletor de item de expressão{
primária }
opcional-item-seleção:
      seletor de item de expressão
{ primária } ?
seletor de itens:
      expressão

Expressões de acesso a campo

campo-acesso-expressão:
      seleção de campo
      implicit-target-field-selection
      projeção
      implicitidade-alvo-projeção
seleção de campos:
      seletor de campo de expressão primária
seletor de campo:
      seletor de campo obrigatório
      opcional-campo-seletor
seletor de campos obrigatórios:

      [ nome do campo ]
opcional-campo-seletor:
      [ nome do campo ] ?
seleção implícita-alvo-campo:
      seletor de campo
Projeção:
      projeção necessária de expressão primária
      expressão primária-opcional-projeção
projeção-necessária:_
      [lista de seletores obrigatórios ]
Opcional-Projeção:
      [lista de seletores obrigatórios ] ?
lista de seletores obrigatórios:
      seletor de campo obrigatório
      obrigatório-campo-seletor-obrigatório-lista
,
implicitidade-alvo-projeção:
      projeção necessária
      opcional-projeção

Expressão da função

função-expressão:
      ( parameter-listopt)return-typeopt=>function-body
função-corpo:
      expressão
lista de parâmetros:
      lista de parâmetros fixos
      fixed-parameter-list
, optional-parameter-list
      lista de parâmetros opcional
lista de parâmetros fixos:
      parâmetro
      parameter-fixed-parameter-list
,
Parâmetro:
      parameter-name primitivo-parameter-typeopt
nome-parâmetro:
      identificador
primitivo-parâmetro-tipo:
      asserção-primitiva
tipo de retorno:
      asserção-primitiva
Primitivo-asserção:

      as nullable-primitive-type
opcional-parameter-list:
      parâmetro-opcional
      optional-parameter
, optional-parameter-list
opcional-parâmetro:

      optional parâmetro

Cada expressão

cada expressão:
      eachcada-expressão-corpo
cada expressão-corpo:
      função-corpo

Deixe a expressão

let-expression:
      let expressão de lista in variável
lista de variáveis:
      variável
      
,lista de variáveis variáveis
variável:
      expressão de nome
= variável
nome-variável:
      identificador

Se expressão

expressão-se:
      ifif-condiçãothenexpressão verdadeira-falsa-expressãoelse
Condição SE:
      expressão
Expressão verdadeira:
      expressão
falsa-expressão:
      expressão

Expressão de tipo

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

      type tipo-primário
type:
      expressão-primária
      tipo-primário
tipo primário:
      primitivo-tipo
      tipo de registo
      tipo de lista
      tipo de função
      tipo de tabela
      tipo nulo
primitivo-tipo:
um dos
      any anynonnull binary date datetime datetimezone duration function
      list logical none null number record table text time type
tipo de registo:
      [ marcador de registo aberto ]
      [ field-specification-listopt ]
      [ field-specification-list , open-record-marker ]
campo-especificação-lista:
      especificação de campo
      campo-especificação-campo-especificação-lista
,
Especificação do campo:

      optional opt campo-nome-campo-tipo-especificaçãoopt
especificação do tipo de campo:

      =tipo de campo
tipo de campo:
      tipo
marcador de registo aberto:

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

      function ( parameter-specification-listopt)return-type
parameter-specification-list:
      required-parameter-specification-list
      required-parameter-specification-list
, opcional-parameter-specification-list
      opcional-parâmetro-especificação-lista
required-parameter-specification-list:
      especificação do parâmetro necessário
      required-parameter-specification
, required-parameter-specification-list
especificação do parâmetro necessário:
      parâmetro-especificação
opcional-parâmetro-especificação-lista:
      opcional-parâmetro-especificação
      opcional-parâmetro-especificação
, opcional-parâmetro-especificação-lista
opcional-parâmetro-especificação:

      optionalparâmetro-especificação
parâmetro-especificação:
      parameter-name parameter-type
tipo de parâmetro:
      assertion
asserção:

      astipo
tipo de tabela:

      table tipo de linha
tipo de linha:

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

Erro ao elevar a expressão

expressão de aumento de erro:
      error expression_

Expressão de manipulação de erros

error-handling-expression:
      tryopt pelo manipuladorde erros de expressão protegida
Expressão-protegida:
      expressão
manipulador de erros:
      cláusula contrária
      Cláusula de captura
cláusula contrária:

      otherwiseexpressão-padrão
expressão-padrão:
      expressão
Cláusula de captura:
      catchFunção de captura
Função de captura:
      (nome-parâmetroopt ) => função-corpo

Atributos literais

literal-atributos:
      gravo-literal
gravo-literal:

      [literal-field-listopt ]
literal-field-list:
      campo literal
      literal-field
, literal-field-list
campo literal:
      nome-campo
= qualquer-literal
lista-literal:

      {opção literal-item-list }
literal-item-list:
      qualquer literal
      qualquer-literal-literal-item-list
,
qualquer-literal:
      gravo-literal
      lista-literal
      lógico-literal
      número-literal
      texto-literal
      nulo-literal