Pergunta

Eu tenho uma idéia para um projeto de hobby que executa alguma análise de código e manipulação. Este projecto vai exigir tanto a árvores de sintaxe abstrata de um determinado arquivo de origem concreto e. Além disso, referências bi-direcional entre as duas árvores seria útil. Eu gostaria de evitar o trabalho de transcrever uma gramática para construir minha própria lexer e analisador.

Existe um formato padrão para descrever concreto ou árvores de sintaxe abstrata? Fazer quaisquer cadeias ferramenta amplamente utilizada suportar a saída para esses formatos?

Eu não tenho uma linguagem de programação alvo específico em mente. Qualquer um popular, vai fazer por um protótipo, mas eu preferiria que eu conheço bem:. Python, C #, Javascript, ou C / C ++

Eu gostaria a capacidade de executar um arquivo de origem através de uma ferramenta ou biblioteca e voltar duas árvores. Em um mundo ideal, seria prático para executar essa ferramenta no código que está sendo editado por um usuário e ser tolerante com erros. Mais uma vez, estou simplesmente tentando desenvolver um protótipo, de modo que estes requisitos são bastante frouxa.

Obrigado!

Foi útil?

Solução

Na nosso projeto definimos o metamodelo AST em UML e utilização ANTLR (Java) para preencher o modelo. Nós também mantemos as informações do token de ANTLR após a análise, mas ainda não tentei atualizar o texto-arquivo subjacente com as modificações feitas no modelo.

Este tem uma sobrecarga hediondo (em infra-estrutura, tais como Eclipse UML2 / EMF), mas nosso objetivo é usar ferramentas de alto nível para baseada em Modelo / Driven Development (MDD, MDA) de qualquer maneira, então decidimos usá-lo em cada nível.

Eu acho que um dos nossos estudantes uma vez jogou com OpenArchitectureWare e conseguiu obter alterações do baseada em Eclipse , gerado editor volta para a árvore de sintaxe (não relacionada com o modelo UML acima) automaticamente, mas eu não sei os detalhes sobre isso.

Você também pode querer olhar em do ANTLR gramáticas árvores .

Outras dicas

A comunidade de pesquisa decidiu que a troca gráfico era a coisa certa a fazer quando se deslocam informações de uma ferramenta de análise de programa para outro. Consulte http://www.gupro.de/GXL

Mais recentemente, o OMG definiu um padrão para o intercâmbio de Abstract Syntax Trees. Consulte http://www.omg.org/spec/ASTM/1.0/Beta1/

Este problema parece ter resolvido uma e outra vez. Há meia dúzia de propostas "ônibus ferramenta" feitas ao longo dos anos que todo o resolveu, com ninguém nunca ultrapassando a indústria. O problema é que a) é fácil para representar ASTs usando qualquer tipo de notação nestable [parênteses como LISP, como XML, ...] para que as pessoas rolar sua própria solução com facilidade, e b) para uma ferramenta para trocar um AST com outro, eles ambos têm que concordar, essencialmente no que a AST nodos média; mas a maioria dos ASTs são bastante acidentalmente derivado do particular gramática / tecnologia de análise utilizada por cada ferramenta, e não há quase sempre desacordo sobre que entre as ferramentas. Então, eu vi muito poucas ferramentas que câmbio ASTs significativamente.

Se você está fazendo uma coisa passatempo, eu ia ficar com um lisp-like que codifica de árvores, onde cada nodo tem o seguinte formato: (...) Seu fácil de gerar e de fácil leitura.

Eu trabalho em um rel="nofollow noreferrer"> ferramenta profissional . Se nós se imprimir a AST, nós fazemos o acima. principalmente indivíduo ASTs são muito complicado de olhar para, na prática, portanto, quase sempre imprimir toda a AST, na melhor das hipóteses um nó e alguns profunda crianças. Nossa ferramenta não troca ASTs com ninguém (ver acima razões :) mas faz exatamente bem construí-la na memória, fazendo coisas whizzy com ele por razões de análise ou razões de transformação e, em seguida ou apenas delete-lo (não há necessidade de enviá-lo em qualquer lugar) ou regenerar o texto no idioma original a partir da árvore. [Este último significa que você precisa anti-análise ou "prettyPrinting" tecnologia]

padrões específicos são uma expectativa, enquanto os padrões de uso mais geral pode também ser apropriada. Ira Baxter já mencionado GXL , e RDF podem ser adicionados também, só que isso exigiria uma ontologia apropriada e é mais orientada para semântica de sintaxe. Ainda pode ser uma opção para investigar.

Para os padrões específicos, Ira Baxter já mencionado ASTM , outra, embora em vez alvos um tipo específico de linguagem (linguagens lógicas) de programação, é um padrão para a semântica / conceitual gráfico , conhecido como ISO-IEC 24707 2007 .

Não é um padrão em seu próprio, mas um artigo sobre esse assunto: Para portátil Fonte Código Representações Usando XML .

Eu não conheço nenhum padrão efetivamente utilizados (nesta área, que é sempre cozinhar em todos os lugares fez-house), eu só estou interessado também neste tópico.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top