Pergunta

background: - existem linguagens formais para expressar linguagem de programação léxico e sintaxe válida - tais representações (por exemplo expressão regular e gramáticas livres de contexto) podem ser compilados automaticamente no léxico / sintaxe analisadores de alguma linguagem de programação usando algumas ferramentas (por exemplo LEX e YACC)

perguntas: - existem tais linguagens formais para a definição semântica da linguagem de programação? - Existem compiladores para automatizar gerar o código do analisador de semântica baseada em línguas formais? -? Quaisquer recursos para ler sobre análise semântica código-fonte

Notas: - você pode encontrar a minha pergunta irrealista, é ok ... Eu sou um novato para compiladores? - por análise semântica i realmente significa a recolha de informação necessária para fora do código-fonte para os próximos passos de otimização de código e geração ... isso deve incluir o tipo / checagem de limites, etc ...

Espero que eu fiz claro muito obrigado antecipadamente

Foi útil?

Solução

Há muitos esquemas para definir a semântica de linguagens de programação: semântica denotacional (que mapeia sintaxe em funções que o programa de computação estado); semântica operacional (o que equivale a intérpretes de construção para seu idioma), semântica de transformação (o que equivale a traduzir o seu languauge para outro idioma para o qual alguns outros semântica já existe), etc.

Muito poucos deles presentemente levar a sistemas utilizáveis ??para linguagens de programação real. Uma das outras respostas aqui sugere Centaur como um sistema que tenta fazer isso. semântica ação por Peter musgos é uma das tentativas recentes mais graves.

Para sistemas reais, em vez mais métodos ad hoc são actualmente as mais eficazes. Estes sistemas inlude em que a sintaxe lexical e gramatical pode ser efetivamente definido (como variantes do LEX e YACC) e, automaticamente, árvores de compilação. gramáticas de atributos permitem a especificação de cálculos sobre as árvores, que permitem definir alguns tipos de análises, como a tabela de símbolos construção ou métricas (tecnicamente você poderia fazer semântica denotacional desta forma). A maioria das linguagens convencionais (C, Java, C #, COBOL, ...) todos têm estruturas relativamente semelhantes em relação ao fluxo de controle e fluxo de dados, e como consequência pode-se construir rotinas de análise de fluxo de genéricos para permitir um para raciocinar sobre tais linguagens padrão.

Finalmente, você precisa de um propósito para sua análise semântica: Que fatos exatamente você quer extrair? A análise estática disponível sistemas têm métodos híbridos-driven padrão / de código para processuais coleta de sintaxe, símbolo da tabela a, e fluxo fatos de interesse para respostas específicas de computação para perguntas específicas.

Alguns sistemas permitem um para usar esta informação semântica para transportar modificação do código-fonte.

Um sistema que segue a abordagem mais ad hoc acima é nossa DMS Software Reengineering Toolkit , que também tem as defintions semânticas genéricos (Sintaxe, tabelas de símbolos, os dados fluem Anlaysis) completou para o real linguagens como Java, C, C ++ e COBOL. DMS pode aplicar transformações fonte-a-fonte para os ASTs condicionado por vários procedimentos para recolha de verdade, e esta massa permite transformação do código de uma maneira confiável.

Outras dicas

Existem muitas linguagens formais para a programação semântica languauge - olhada na wikipedia entrada para alguns mais termos para o google. Eu fiz uma pequena quantidade de Z no meu início de carreira (que apontam para os métodos formais wiki é outra possível lugar para começar a explorar). Eu sugiro perguntar sobre a lambda o fórum final como as pessoas de lá usar alguns deles, e pode sugerir o que usar por qualquer caso de uso que você tem em mente; este papel parece um pouco relacionado com o que pediu em termos de geração de compiladores - Você precisa tanto a semântica da linguagem e uma descrição da máquina de destino para criar um compilador.

Especificamente para análise estática, olhada http: //rw4.cs. uni-sb.de/~martin/pag/

O que você descreve é ??exatamente o que o projeto Centaur foi sobre: ??

http://www-sop.inria.fr/croap/centaur /centaur.html

Na verdade, você poderia muito bem ao descrever a semântica do seu idioma, até o ponto onde o sistema foi capaz de dar-lhe um intérprete para que a linguagem (que é quando você tinha descrito a semântica completamente). Mas você não tem que percorrer todo o caminho. Você poderia fazer menos de descrição do trabalho, e ainda obter um editor estruturado e typechecker para seus esforços.

Embora o trabalho tenha cessado no projeto (tanto quanto eu posso dizer), você pode encontrar artigos interessantes e download nos links.

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