Come è una nullliteral rappresentata nella forma dell'albero?
-
15-09-2020 - |
Domanda
Secondo il specifica di ecmascript Nella sezione 7.8.1 A NullLiteral
è definito come segue:
NullLiteral :: null.
Quello che sto cercando di capire è il modo in cui è rappresentato in forma di albero quando un NullLiteral
è incluso nelle seguenti produzioni trovate nelle sezioni 7.6.1 e 7.8 . .
ReservedWord ::
Keyword
FutureReservedWord
NullLiteral
BooleanLiteral
Literal ::
NullLiteral
BooleanLiteral
NumericLiteral
StringLiteral
.
La mia migliore ipotesi su come sarebbe sembrare questo:
InputElementDiv | Token | IdentifierName | ReservedWord | Literal | NullLiteral | null.
Questo non sembra comunque giusto per me.
Nota
Dalla mia ricerca sembra che pochissimi compilatori generano CSTS dalla grammatica della lingua.Posso ovviamente capire perché, ma questo è un esercizio di apprendimento per me, quindi voglio avere questo diritto prima di passare a mezzi di analisi più professionali come l'utilizzo di un generatore di parser.
Soluzione
L'albero come mostrato non è coperto dalla grammatica, perché ciò non fornisce una derivazione da IdentifierName
a ReservedWord
e non fornisce neanche di derivare ReservedWord
a Literal
.
La produzione ReservedWord
in effetti viene utilizzata solo per limitare i valori validi di IdentifierName
, e questo dovrebbe essere visto sul livello lessicale.Non lo fa in un CST, dove vedresti solo il IdentifierName
.
Il contesto di Letterale è Primary Expression, quindi un frammento di un vero cst potrebbe assomigliare a questo:
...
|
PrimaryExpression
|
Literal
|
NullLiteral
|
null
.