2009-12-01 24 views
27

Tengo un proyecto donde un usuario necesita definir un conjunto de instrucciones para una interfaz de usuario que está completamente escrito en JavaScript. Necesito tener la habilidad de analizar una cadena de instrucciones y luego traducirlas en instrucciones. ¿Hay bibliotecas para analizar que sean 100% javascript? ¿O un generador que se generará en javascript? ¡Gracias!Lexer escrito en Javascript?

+0

Opps, por relectura de su pregunta ... ¿el usuario está escribiendo instrucciones en lenguaje natural (no javascript)? pero quieres tomar lo que han escrito y convertirlo en javascript? – Mottie

+0

Tengo un proyecto que tiene requisitos similares al tuyo: necesitas un analizador de JavaScript y un generador de código. ¿has decidido usar alguno? – Paul

+2

Utilicé: http://jscc.jmksf.com/ Funcionó perfecto para mí. – Phobis

Respuesta

22

¿Algo como http://jscc.phorward-software.com/, quizás?

JS/CC es el primer sistema de desarrollo de analizador disponible para JavaScript and ECMAScript -derivados. Se ha desarrollado, ambos, con la intención de construir un sistema de desarrollo de compilador productivo y con la intención de crear un entorno académico fácil de usar para las personas interesadas en cómo se hace la generación de tabla de análisis general en de análisis ascendente.

Las uniones de software independientes de la plataforma ambos: un habitual basada en la expresión lexical analyzer generador de emparejar tokens individuales de la secuencia de caracteres de entrada y un generador LALR(1) analizador, computación las tablas de análisis sintáctico para una especificación context-free grammar dado y la construcción de un stand -solo, analizador de trabajo. La gramática libre de contexto alimentada a JS/CC se define en un metalenguaje basado en Backus-Naur-Form, y permite la inserción de un código semántico individual para ser evaluado en una reducción de regla.

JS/CC en sí ha sido escrito completamente en ECMAScript para que pueda ser ejecutado de muchas maneras diferentes: como JavaScript independiente de la plataforma, basada en un navegador incrustado en una página web, como una aplicación de Windows Script Host, como un compilado JScript.NET ejecutable, como una aplicación interpretada de Mozilla/Rhino o Mozilla/Spidermonkey, o un script de shell V8 en Windows, * nix, Linux y Mac OSX. Sin embargo, para una ejecución productiva, se recomienda utilizar las versiones de línea de comandos. Estas versiones son capaces de ensamblar un compilador completo a partir de una especificación del analizador JS/CC, que luego se almacena en un archivo fuente JavaScript .js.

+1

Esto se ha movido a aquí: http://jscc.phorward-software.com/ – KnowHowSolutions

1

Dependiendo del diseño del 'conjunto de instrucciones', puede utilizar la función incorporada de Javascript eval, que analiza la fuente Javascript; puede escribir un traductor simple para convertir las instrucciones a código Javascript.

Por cierto, tenga mucho cuidado con los agujeros XSS.

+0

Esto probablemente será una sintaxis que es mucho más simple y no relacionada con javascript. Lo está definiendo otro grupo con el que estoy trabajando. – Phobis

+0

Si se trata de una sintaxis muy simple, es posible que pueda transformarla fácilmente en Javascript, probablemente con un conjunto de funciones auxiliares para que la fuente transformada pueda llamar. – SLaks

4

Para tareas de análisis simples, soy bastante aficionado a usar una variante de Pratt's Top Down Operator Precedence parser. Si bien Pratt escribió el documento original utilizando un antiguo dialecto Lisp, los mismos conceptos se pueden usar fácilmente en la mayoría de los idiomas. De hecho, Douglas Crockford escribió un excelente artículo en Top Down Operator Precedence parsing in JavaScript, que podría ser justo lo que necesita.

+0

¿El analizador está disponible para su descarga? Traté de leer el PDF pero requiere un nombre de usuario :( – Mottie

+0

Disculpe. He editado mi respuesta para reemplazar el enlace original con un enlace PDF gratuito que encontré. Personalmente, encontré que el artículo de Crockford era más útil que el el papel en sí, que incluí principalmente como una cuestión de interés histórico. Si hablas Lisp, hay algún código basado en el documento aquí: http://bit.ly/dFdrl, y también hay implementación basada en Python aquí: http://bit.ly/12HNkV. – bcat

0

Estaba buscando algo similar que no tuviera agujeros de seguridad y me encontré con dos recursos. No analizan el script, sino que lo ejecutan en un entorno "seguro", algo que no se puede garantizar cuando se usa la función eval. Por lo tanto, no sé si es exactamente lo que está buscando, pero echar un vistazo:

  1. jsandbox - Javascript caja de arena
  2. Google Caja - iframe virtual.
13

Si desea generar analizadores de código JavaScript y generadores de código, revise la implementación de MetaII en Javascript.

Un MetaII Compilador tutorial le guía a través de la construcción de un sistema de compilador completamente autónomo que puede traducirse y otros idiomas:

MetaII Compiler Tutorial

esto se basa en una de 10 páginas de papel poco sorprendente técnica por parte Val Schorre: META II: un lenguaje de escritura de compilador orientado a la sintaxis de honesto a dios 1964. ¡La autodescripción completa del compilador de MetaII es de aproximadamente 30 líneas! Aprendí cómo compilar compiladores a partir de esto en 1970. Hay un momento alucinante en el que finalmente entiendes cómo el compilador puede regenerarse ...

El tutorial explica MetaII, cómo funciona e implementa MetaII compilando MetaII en JavaScript. Puede modificar fácilmente este compilador para analizar otros idiomas y producir Javascript diferente.

Conozco al autor del sitio web de mis días universitarios, pero no tengo nada que ver con el sitio web.

1

si realmente está buscando simplemente un lexer, intente prettify.

1

Si quieres un analizador léxico y nada más que un analizador léxico y luego echar un vistazo a esto: https://github.com/aaditmshah/lexer

Es un analizador léxico JavaScript puro con un montón de características de gran alcance escrito en tan sólo unas pocas líneas de código.

1

Aquí es un ejemplo de un programa de análisis para un "pseudo" lenguaje natural de instrucciones, que se implementó en pura JavaScript con Chevrotain de análisis de DSL:

https://github.com/SAP/chevrotain/blob/master/examples/parser/inheritance/inheritance.js

Este ejemplo también incluye soporte para múltiples idiomas naturales (inglés & alemán) usando herencia gramatical.

chevrotain cae bajo la categoría de "bibliotecas que hay para el análisis sintáctico que son 100% javascript" generación ya que realiza ningún código. Usando chevrotain es similar a la "fabricación artesanal", un programa de análisis decente recursiva, solamente sin la mayor parte del dolor de cabeza tales como:

  • creación función de búsqueda anticipada (decidir qué alternativa tomar)
  • recuperación automática de errores.
  • Detección de recursión a la izquierda
  • Detección de ambigüedad.
  • Información de posición.
  • ...

como chevrotain se encarga de que de forma automática.

Cuestiones relacionadas