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.

¿Fue útil?

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top