De nos jours, il y a au moins un meilleur outil, appelé slimit
:
SLIMIT est un JavaScript minifier écrit en Python. Il compile en code JavaScript plus compact pour qu'il télécharge et exécute plus rapidement . SlimIt fournit également une bibliothèque qui inclut un analyseur syntaxique JavaScript, un fichier lexer , une jolie imprimante et un visiteur arborescente.
Démo:
Imaginez que nous avons le code javascript suivant:
$.ajax({
type: "POST",
url: 'http://www.example.com',
data: {
email: '[email protected]',
phone: '9999999999',
name: 'XYZ'
}
});
Et maintenant, nous avons besoin de email
, phone
et name
valeurs de l'objet data
.
L'idée serait d'instancier un analyseur slimit
, visitez tous les noeuds, filtrer toutes les affectations et les mettre dans le dictionnaire:
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
Il imprime:
{'name': "'XYZ'",
'url': "'http://www.example.com'",
'type': '"POST"',
'phone': "'9999999999'",
'data': '',
'email': "'[email protected]'"}
cela pourrait être exactement ce dont j'ai besoin, car je veux vraiment étendre la grammaire javascript standard. Merci! – Claudiu
les deux grammaires ecmascript/javascript pour antlr3 sont cassées et non maintenues. c'est un hareng rouge. –