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?
Respuesta
¿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.
Esto se ha movido a aquí: http://jscc.phorward-software.com/ – KnowHowSolutions
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.
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
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
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.
¿El analizador está disponible para su descarga? Traté de leer el PDF pero requiere un nombre de usuario :( – Mottie
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
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:
- jsandbox - Javascript caja de arena
- Google Caja - iframe virtual.
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:
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.
si realmente está buscando simplemente un lexer, intente prettify.
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.
Jison es probablemente el mejor y más activo lexer & generador de analizadores para Javascript. Se parece a Bison y Yacc.
Jison: http://zaach.github.io/jison/
Si sólo desea un analizador léxico peso ligero (~ 100 SLOC) se puede echar un vistazo a Lexed.js: https://github.com/tantaman/lexed.js
Antlr version 4.5 ahora tiene un Javascript target.
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.
- 1. Analizador de Java escrito en JavaScript
- 2. Habilitando CoffeeScript lexer en SciTE?
- 3. ANTLR3 lexer precedencia
- 4. Herramientas Lexer/analizador
- 5. ¿Hay algún analizador JSDoc de código abierto escrito en Javascript?
- 6. Lexer que reconoce bloques sangrados
- 7. C# /. NET Generadores de Lexer
- 8. PHP Lexer and Parser Generator?
- 9. Lenguaje similar a CoffeeScript escrito en Python
- 10. Antlr lexer tokens que coinciden con cadenas similares, ¿y si el codicioso lexer comete un error?
- 11. servidor FTP escrito en C#
- 12. RegEx Parser escrito en Prolog
- 13. Cómo construir eficientemente un intérprete (lexer + analizador) en C?
- 14. Controlando Python PLY estados lexer del analizador
- 15. Negating inside lexer- and parser rules
- 16. Cómo escribir un lexer (shell) a mano
- 17. Compatibilidad con Flex (lexer) para Unicode
- 18. ¿Cuál sería un buen Delphi lexer/parser para el archivo de idioma de Javascript?
- 19. Sancionar el código de JavaScript escrito en una línea en el bloc de notas ++ o similar
- 20. ¿Por qué Firefox está escrito en C++ y en la interfaz de usuario de JavaScript?
- 21. Caracteres que coinciden con varias reglas de Lexer en ANTLR
- 22. ¿cuál debería ser la salida de un lexer en c?
- 23. en qué idioma está escrito Asana?
- 24. Analizador de SSI escrito en PHP?
- 25. ¿Generador de instalador escrito en Java?
- 26. ¿Qué está escrito estáticamente en RPython?
- 27. ¿Qué software se ha escrito en Scheme?
- 28. ¿Algún IDE de PHP escrito en C?
- 29. ¿Hay un analizador GEDCOM escrito en Python?
- 30. ¿Visual Studio está escrito en winforms?
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
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
Utilicé: http://jscc.jmksf.com/ Funcionó perfecto para mí. – Phobis