Categorías
Java Development Tools (JDT)

Analizar una secuencia de declaraciones de Java utilizando JDT ASTParser

Echemos un vistazo a cómo analizar una secuencia de declaración de Java utilizando ASTParser de Eclipse JDT.

Al decir una secuencia de una declaración, me refiero a líneas de código que provienen de un método como el siguiente:

int i = 9; 
int j = i+1;

Aquí está el código de cómo hacer esto.

public static void main(String[] args) {
 
		ASTParser parser = ASTParser.newParser(AST.JLS3);
		parser.setSource("int i = 9; n int j = i+1;".toCharArray());
 
		parser.setKind(ASTParser.K_STATEMENTS);
 
		Block block = (Block) parser.createAST(null);
 
		//here can access the first element of the returned statement list
		String str = block.statements().get(0).toString();
 
		System.out.println(str);
 
		block.accept(new ASTVisitor() {
 
			public boolean visit(SimpleName node) {
 
				System.out.println("Name: " + node.getFullyQualifiedName());
 
				return true;
			}
 
		});
	}

En el código anterior, parser.setKind (ASTParser.K_STATEMENTS) hace que el analizador acepte una secuencia de declaraciones. Una vez que se establece en esto, parser.createAST (null) devolverá un Bloque en lugar de una CompilationUnit.

Aquí está la jerarquía de clases de Block.

Dado que es una subclase de ASTNode, también tiene un método que puede aceptar un ASTVisitor para atravesar el árbol de sintaxis abstracta.

Puede descargar el archivo jar requerido aquí.

  ASTParser ignora la clase interna incrustada

Referencias:

http://help.eclipse.org/helios/index.jsp?topic=%2Forg.eclipse.jdt.doc.isv%2Freference%2Fapi%2Forg%2Feclipse%2Fjdt%2Fcore%2Fdom%2FBlock.html
http://help.eclipse.org/helios/index.jsp?topic=%2Forg.eclipse.jdt.doc.isv%2Freference%2Fapi%2Forg%2Feclipse%2Fjdt%2Fcore%2Fdom%2FASTParser.html

Por Programación.Click

Más de 20 años programando en diferentes lenguajes de programación. Apasionado del code clean y el terminar lo que se empieza. ¿Programamos de verdad?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *