17.12.2012 Views

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

from compiler.visitor import ASTVisitor<br />

from compiler.ast import Stmt, Class, Function<br />

class DisplayVisitor(ASTVisitor):<br />

"""Visite l'AST"""<br />

def __init__(self, name):<br />

self.name = name<br />

Discussion<br />

Exercices corrigés<br />

CHAPITRE 11<br />

def _visit_node(self, node):<br />

"""Appelle sur les nodes"""<br />

if (isinstance(node, Stmt) or<br />

(hasattr(node, 'name') and node.name != self.name)):<br />

for subnode in node.getChildNodes():<br />

self._visit_node(subnode)<br />

return<br />

if not (isinstance(node, Class) or isinstance(node, Function)):<br />

return<br />

print('Trouvé ligne %d' % node.lineno)<br />

if node.doc is None:<br />

print('\n\tAucun docstring\n')<br />

else:<br />

print('\n\t%s\n' % node.doc)<br />

visitClass = _visit_node<br />

visitFunction = _visit_node<br />

visitStmt = _visit_node<br />

def print_module(path, element, verbose=False):<br />

"""Permet l'affichage d'un doctstring de classe ou de fonction"""<br />

with open(path) as f:<br />

ast = parse(f.read())<br />

walk(ast, DisplayVisitor(element))<br />

if __name__ == '__main__':<br />

print_module(sys.argv[1], sys.argv[2])<br />

Grâce à sa fonction parse, le paquet compiler construit un AST (Abstract Syntax<br />

Tree) à partir de code Python. Très rapide, cette opération lit le contenu d’un module<br />

sans avoir à l’importer.<br />

walk offre ensuite la possibilité de traverser l’AST, en fournissant une classe qui dérive de<br />

la classe compiler.visitor.ASTVisitor. Chaque nœud de l’AST est passé à la méthode<br />

visitTypeNoeud de la classe si elle existe, où TypeNoeud est le type de nœud visité.<br />

383

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!