Hoy en día, hay por lo menos una herramienta mejor, llama slimit
:
SLIMIT es un JavaScript Minifier escrito en Python. Compila JavaScript en un código más compacto para que se descargue y ejecute más rápido.
SlimIt también proporciona una biblioteca que incluye un analizador de JavaScript, lexer, impresora bonita y un árbol visitante.
Demostración:
Imaginemos que tenemos el siguiente código JavaScript:
$.ajax({
type: "POST",
url: 'http://www.example.com',
data: {
email: '[email protected]',
phone: '9999999999',
name: 'XYZ'
}
});
Y ahora tenemos que conseguir email
, phone
y name
valores del objeto data
.
La idea sería crear una instancia de un analizador slimit
, visitar todos los nodos, filtrar todas las asignaciones y ponerlos en el diccionario:
from slimit import ast
from slimit.parser import Parser
from slimit.visitors import nodevisitor
data = """
$.ajax({
type: "POST",
url: 'http://www.example.com',
data: {
email: '[email protected]',
phone: '9999999999',
name: 'XYZ'
}
});
"""
parser = Parser()
tree = parser.parse(data)
fields = {getattr(node.left, 'value', ''): getattr(node.right, 'value', '')
for node in nodevisitor.visit(tree)
if isinstance(node, ast.Assign)}
print fields
Imprime:
{'name': "'XYZ'",
'url': "'http://www.example.com'",
'type': '"POST"',
'phone': "'9999999999'",
'data': '',
'email': "'[email protected]'"}
esto podría ser exactamente lo que necesito, ya que de hecho quiero extender la gramática de JavaScript estándar. ¡Gracias! – Claudiu
ambas gramáticas ecmascript/javascript para antlr3 están rotas y no se han mantenido. es un arenque rojo. –