Comment un NullLiteral est-il représenté sous forme d'arborescence ?
-
15-09-2020 - |
Question
Selon le Spécification ECMAScript dans la section 7.8.1 un NullLiteral
est défini comme suit :
NullLiteral :: nul
Ce que j'essaie de comprendre, c'est comment cela est représenté sous forme d'arbre lorsqu'un NullLiteral
est inclus dans les productions suivantes trouvées dans les sections 7.6.1 et 7.8.
ReservedWord :: Keyword FutureReservedWord NullLiteral BooleanLiteral Literal :: NullLiteral BooleanLiteral NumericLiteral StringLiteral
Ma meilleure hypothèse quant à quoi cela ressemblerait est la suivante :
InputElementDiv | Token | IdentifierName | ReservedWord | Literal | NullLiteral | nul
Mais cela ne me semble tout simplement pas correct.
Note
D'après mes recherches, il semble que très peu de compilateurs génèrent réellement des CST à partir de la grammaire du langage.Je peux bien sûr comprendre pourquoi, mais c'est un exercice d'apprentissage pour moi, donc je veux bien faire les choses avant de passer à des moyens d'analyse plus professionnels, comme l'utilisation d'un générateur d'analyseur.
La solution
L'arbre tel qu'illustré n'est pas couvert par la grammaire, car cela ne fournit pas de dérivation de IdentifierName
à ReservedWord
, et il ne permet pas de dériver ReservedWord
à Literal
soit.
Le ReservedWord
la production n'est en fait utilisée que pour restreindre les valeurs valides de IdentifierName
, et cela doit être vu au niveau lexical.Il ne s'agit pas d'un CST, où l'on verrait uniquement les IdentifierName
.
Le contexte de Literal est PrimaryExpression, donc un fragment d'un véritable CST pourrait ressembler à ceci :
...
|
PrimaryExpression
|
Literal
|
NullLiteral
|
null