¿Cómo es un NullLiteral representada en forma de árbol?
-
15-09-2020 - |
Pregunta
De acuerdo a la Especificación ECMAScript en la sección 7.8.1 un NullLiteral
se define como sigue:
NullLiteral :: null
Lo que estoy tratando de entender es cómo esto se representa en forma de árbol cuando un NullLiteral
se incluye en las siguientes producciones encontrar en las secciones 7.6.1 y 7.8.
ReservedWord :: Keyword FutureReservedWord NullLiteral BooleanLiteral Literal :: NullLiteral BooleanLiteral NumericLiteral StringLiteral
Mi mejor conjetura en cuanto a cómo sería el resultado es este:
InputElementDiv | Token | IdentifierName | ReservedWord | Literal | NullLiteral | null
Esto simplemente no parece correcto para mí, sin embargo.
Nota
A partir de mi investigación parece que muy pocos de los compiladores de generar Cst desde el lenguaje de la gramática.Yo, por supuesto, pueden entender por qué, pero este es un ejercicio de aprendizaje para mí, así que quiero conseguir este derecho antes de seguir con más profesional de los medios de análisis, tales como el uso de un analizador de generador.
Solución
El árbol, como se muestra no está cubierto por la gramática, ya que no proporciona una derivación de IdentifierName
a ReservedWord
, y no proporcionan para la obtención de ReservedWord
a Literal
cualquiera de los dos.
El ReservedWord
la producción, de hecho, sólo se utiliza para restringir los valores válidos de IdentifierName
, y esto debe ser visto en el nivel léxico.No lo hacen en un CST, donde podría ver la IdentifierName
.
El contexto de Literal es PrimaryExpression, por lo que un fragmento de un verdadero CST podría tener este aspecto:
...
|
PrimaryExpression
|
Literal
|
NullLiteral
|
null