Como é um NullLiteral representado em forma de árvore?
-
15-09-2020 - |
Pergunta
De acordo com o Especificação ECMAScript na seção 7.8.1 um NullLiteral
é definido da seguinte forma:
NullLiteral :: null
O que eu estou tentando entender é como isso é representado em forma de árvore quando um NullLiteral
está incluído no seguinte produções encontradas nas seções 7.6.1 e 7.8.
ReservedWord :: Keyword FutureReservedWord NullLiteral BooleanLiteral Literal :: NullLiteral BooleanLiteral NumericLiteral StringLiteral
Meu melhor palpite de como seria o aspecto é este:
InputElementDiv | Token | IdentifierName | ReservedWord | Literal | NullLiteral | null
Isso apenas não parece certo para mim.
Nota
A partir de minha pesquisa, parece que muito poucos compiladores, na verdade, gerar CSTs da língua gramática.Posso, claro, entender o porquê, mas este é um exercício de aprendizagem para mim assim que eu quero me este direito antes de eu me mudar para a mais profissional de meios de análise, tais como a utilização de um gerador de analisador.
Solução
A árvore, como mostrado não é coberto pela gramática, porque não fornece uma derivação do IdentifierName
para ReservedWord
, e ele não fornece para a obtenção ReservedWord
para Literal
qualquer um.
O ReservedWord
a produção na verdade, é utilizado apenas para restringir os valores válidos de IdentifierName
, e isso deve ser visto no nível lexical.Ele não torná-lo um CST, em que é possível ver apenas o IdentifierName
.
O contexto Literal, é PrimaryExpression, então, um fragmento de um real CST poderia ter esta aparência:
...
|
PrimaryExpression
|
Literal
|
NullLiteral
|
null