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.

Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top