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 deand 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 literaisoptsection
nome;
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:
nullable
opcional 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:
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 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:
if
Condição-sethen
expressãoelse
verdadeira 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:
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:
assertion
declaração:
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:
(
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