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 dosand 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-attributesoptsection
section-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:
each
cada-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:
if
if-condiçãothen
expressã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:
optional
parâmetro-especificação
parâmetro-especificação:
parameter-name parameter-type
tipo de parâmetro:
assertion
asserção:
as
tipo
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:
try
opt 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:
otherwise
expressão-padrão
expressão-padrão:
expressão
Cláusula de captura:
catch
Funçã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