ANTLR - Árvore sem raiz

0 respostas
Mantu

Olá galera!
Alguém aqui já usou o ANTLR? Já conseguiu gerar um parser que traduzir uma linguagem em alguma outra coisa?
Sim? Então aqui vai a pergunta:
Estou tentando usar o ANTLR junto com uma gramática Java (Feita pelo próprio cara do ANTLR) para extrair alguns dados estatísticos sobre o uso das classes em dentro de um arquivo .java.
Só que não estou conseguindo, por que me parece que a gramático do cara tá especificada de tal forma, que a arvore de análise sintática gerada não tem raiz!!! O nó que deveria ser raiz, tem nós irmãos! E pra piorar, não existe um nó acima destes!!!
Isso faz com que eu não consiga especificar uma gramática para um TreeParser que possa analizar todo o código do arquivo java…
Eu acho que isso acontece por causa da forma como está a regra inicial da gramática do parser, a saber:

compilationUnit
		// A compilation unit starts with an optional package definition
		(	packageDefinition
		|	/* nothing */
		)

		// Next we have a series of zero or more import statements
		( importDefinition )*

		// Wrapping things up with any number of class or interface
		//    definitions
		( typeDefinition )*
	;

Pelo que eu entendi dessa regra, eu não vou ter um nó que agrupe a declaração de pacote, os imports e as definições de classes…
O negócio é tão zicado, que quando eu crio a classe java pra testar o parser especificado pela gramática do cara, se eu obter o String que representa a árvore, percebe-se que ela morre na declaração de pacote:

( package ( . ( . antlr java ) testfiles ) )

Alguém saberia como criar um TreeParser que consiga acessar o nós “irmãos da raíz”?

Criado 28 de agosto de 2006
Respostas 0
Participantes 1