¿Es posible acceder al AST del motor v8 para obtener un código JavaScript determinado? Estoy trabajando en un Analizador Estático JavaScript usando el motor V8.Acceda al árbol de sintaxis abstracto del motor V8
Respuesta
Esto es bastante viejo, pero tal vez la respuesta ayuda alguien tropezando con esto. La respuesta es sí, suponiendo que esté dispuesto a modificar V8 y compilar su propia versión de la misma.
Si es así, entonces en compiler.cc a encontrar un lugar donde MakeCode se llama a lo largo MakeFunctionInfo que transforma la AST que se almacena en el pasado en el objeto CompilationInfo en código nativo. Usted tiene que escribir una clase que hereda de AstVisitor entonces se puede inspeccionar el AST mediante la inserción de las siguientes líneas antes de la llamada a MakeCode:
MyAstVisitor mAV;
// this will call VisitFunctionLiteral in your AST visitor
info->function()->Accept(mAV);
Como V8 compila funciones justo a tiempo cuando en realidad están llamado, hay otro punto en CompileLazy donde tendría que hacer lo mismo para obtener sus AST durante la ejecución de los scripts de llamada.
Debido a la compilación perezosa, esto probablemente no le permitirá hacer un análisis estático, porque la ejecución ya está en progreso antes de que tenga acceso a los AST para cosas compiladas perezosamente. Pero así es como obtener los AST.
Uso --print-ast
través SetFlagsFromString
Creo que OP quiere acceder al AST como una estructura de datos que puede rastrear. Es cierto que puede exportar de esta manera y construir su propio lector AST, y rastrear sus propias estructuras de datos, pero sospecho que quiere evitar ese poco de torpeza si es posible. –
¿Sabes si todavía existe esa bandera? –
Bueno, no sé lo que quiere lograr, pero parece que usted quiere modificar el AST del interior de su código C++ (o tal vez escribir clases contenedoras para el contexto JavaScript para ellos también?).
que sugieren que echar un vistazo en el archivo de cabeceras que bonito explica lo que está ahí para ser usado en AST de V8:
http://v8.googlecode.com/svn/trunk/src/ast.h
~ Saludos
- 1. Convertir el árbol de sintaxis abstracto en código de bytes
- 2. Cuándo usar un árbol de sintaxis abstracto o concreto?
- 3. ¿Cómo diseñar partes de un árbol de sintaxis abstracto?
- 4. ¿Cómo puedo acceder al árbol de análisis v8? ¿Cómo puedo hacerlo?
- 5. ¿Cuál es la diferencia entre un árbol de sintaxis abstracta y un árbol de sintaxis concreta?
- 6. Generación de un árbol de sintaxis abstracto para el código fuente de java con ANTLR
- 7. Haciendo referencia al motor V8 de Google desde una aplicación .NET
- 8. Construcción y recorrido del árbol de sintaxis abstracta
- 9. ¿Qué es un árbol sintáctico abstracto/¿Es necesario?
- 10. ¿Se podría compilar Python para ejecutar en el motor V8?
- 11. Reglas semánticas/Reglas del árbol de sintaxis abstracta
- 12. Beneficios del motor JavaScript V8 en MongoDB para reducir el mapa
- 13. Acceda al field.choices de Django
- 14. ¿Qué son los atributos sintetizados en el contexto de la creación de un árbol de sintaxis abstracto?
- 15. problema al crear Rails 3 del motor
- 16. Render árbol de sintaxis lingüística en navegador
- 17. cadena de árbol de sintaxis abstracta
- 18. Perl: Javascript :: Plantillas V8 - del perl
- 19. Cómo construir un árbol de sintaxis abstracta
- 20. Acceda al diccionario de Android para autocompletar
- 21. C++ Acceda a esto en la Sintaxis del nuevo declarador de funciones
- 22. Node.js y V8 de recolección de basura
- 23. Acceda al caché de Google Chrome
- 24. Acceda al valor de una expresión miembro
- 25. Árbol binario del árbol general
- 26. Impedir que PHP acceda al directorio principal
- 27. Error en el motor regex JavaScript V8 cuando se hace coincidir el comienzo de la línea?
- 28. Volcado v8 Salida JIT del nodo
- 29. Rails.root del motor
- 30. Rails Configuración del motor
posible duplicado de [¿Cómo puedo acceder al árbol de análisis de v8? ¿Cómo puedo hacerlo?] (Http://stackoverflow.com/questions/8550774/how-do-i-access-v8-parse-tree-how- can-it-be-done) – zengr