2009-11-23 13 views

Respuesta

8

¿Qué tal el ECMAScript standard? completa por definición: -}

EDIT: Si desea una gramática existente, pruebe uno de los sitios de los instrumentos de generación de gramática. Para ANTLR, aquí está el ECMAScript grammar. No sé nada de su calidad, pero la ANTLR puede producir buenos analizadores si la gramática se construye con cuidado. Probablemente encontrará que la gramática también está entrelazada con un montón de cosas ANTLR, por lo que puede sufrir algunos de los mismos problemas que el estándar desde su punto de vista. Al menos puedes borrar todo eso.

+2

Preciso tal vez, pero es un PDF que se extiende segmentos de la sintaxis en todo el documento y utiliza negrita para tokens literales, lo que significa que la extracción (automática o manual) de un EBNF completo sería un gran alboroto dolor en el culo –

+0

Ver EDITAR para responder. –

+0

Sí, dado que el ANTLR es en realidad una gramática, debería ser capaz de crear un script para convertirlo. Lo intentaré más tarde y veré a dónde llegaré. (No me llevé muy bien con ANTLR, así que estoy experimentando con otras herramientas para ver lo que prefiero). –

8

Capítulo 2 de Crockford JavaScript: las partes buenas diagramas (lo has adivinado) las partes buenas.

Aquí hay un par de puñaladas en el BNF para JavaScript:

de este SO pregunta anterior:

Repository of BNF Grammars?

+0

El Tom Copeland está incompleto (no hay tokens o terminales) - se genera desde un script JavaCC, e incluso cuando traté de usar el script original seguí recibiendo errores. Para el otro enlace dherman/ClassicJavascript, ¿no tengo ni idea de qué se trata? : S –

+0

Sí. Simplemente creo que nadie está muy interesado en EBNF para los lenguajes de scripting.Los lenguajes dinámicos no se prestan a la compilación recursiva de descendencia. ¿De qué sirve un compilador tradicional cuando puedes construir funciones de cadenas sobre la marcha? Acelerar JS se trata de FILs similares a Forth, análisis de tiempo de ejecución de vías comunes, tokenización, etc. – Nosredna

+0

Tengo algunas ideas vagas acerca de cómo abordar las cosas dinámicas, ¡pero hasta ahora ni siquiera he llegado tan lejos! ¿Puede proporcionar alguna explicación (o proporcionar enlaces) de lo que "TILs" es/son? Hay demasiadas cosas para que mis búsquedas devuelvan algo. :( –

2

tratar este enlace ecmascriptA3 tiene el BNF de ecmascript

+0

El enlace está roto: 404 –

+0

de hecho. googleando mostró que ahora está en github. editando el enlace – zeacuss

4

Estoy trabajando en el analizador basado en para ECMAScript. Aquí está mi gramática hasta el momento:

Véase también BNF de Tom Copeland para EcmaScript:

, así como "Sin embargo, otro JavaScript intérprete":

Además de Gramática de Dojo Toolkit (probablemente basada en YAJI):

Desde mi punto de vista, YAJI o Dojo Toolkit son los mejores y el más completo (a lo mejor de mi conocimiento). Estoy basando mi trabajo en esos, pero quiero hacerlo aún más completo (5.1/6) y de conformidad estándar pero práctico.

La gramática de ECMAScript es muy complicada.Tiene unas enormes salvedades:

  • literales de expresiones regulares vs División (no se puede distinguir de ellos en el nivel léxico)
  • automático Punto y coma Inserción (ASI)

Así Tenga en cuenta de eso. Implementarlos es muy complicado.

Si su plataforma de destino es Java y no le importa JavaCC, me gustaría que se una a mi proyecto. Mi gramática está realmente lista (compila/compila sin advertencias). Ahora estoy trabajando en suites de prueba para cubrir cada característica y producción. Sin embargo, anticipo algunos problemas con los literales de expresiones regulares y los ASI.

ps. Me acabo de dar cuenta de que la pregunta es de 09, por lo que mi invitación probablemente sea demasiado tarde. :)

+0

_ "ps. Acabo de notar que la pregunta es de 09, así que mi invitación es probablemente demasiado tarde." _ No, el proyecto que quería esto for ha estado en el estante por un buen tiempo, aunque desafortunadamente no tengo tiempo para resucitarlo en este momento, pero todavía tengo planes vagos de hacerlo en algún momento. He marcado tu proyecto para cuando Tengo la oportunidad de nuevo. Gracias. :) –

Cuestiones relacionadas