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”?