Pergunta

No meu trabalho eu, e outras pessoas na minha equipe de escrever uma série de modelos de hardware em Verilog-AMS, uma linguagem apoiada principalmente por fornecedores comerciais e alguns opensource simulador de projetos.Uma coisa que gostaria de fazer a apoiar uns aos outros de código mais útil seria a linter que iria verificar o nosso código para problemas comuns e ajudar com a aplicação de um código compartilhado estilo de formatação.Eu, claro, quero ser capaz de adicionar as minhas próprias regras e, depois de me provar a sua utilidade para mim, promovê-los para o resto da equipe..Eu não me importo de fazer o trabalho que tem para ser feito, mas é claro que também querem aproveitar o trabalho de outros projetos existentes.

O fato de ter permitido a sintaxe da linguagem no yacc ou bison formato de me dar um empurrãozinho?ou devo apenas chupar cada instrução de idioma em um perl de seqüência de caracteres, e usar o pattern matching para encontrar as coisas que eu não gosto?

(mais de sintaxe e erros de compilação são facilmente capturados pelas ferramentas comerciais..mas temos algumas de nossas próprias extensões.)

Foi útil?

Solução

lex/flex e yacc/bison fornecem informações de fácil utilização, bem entendido lexer - e parser-geradores, e eu realmente recomendo fazer algo como que em oposição a fazê-lo processualmente na e.g.Perl.Expressões regulares são uma coisa poderosa para rasgar cadeias relativamente-, mas não totalmente-estrutura fixa.Com qualquer linguagem de programação real, o tamanho de sua máquina de estado chega a ser simplesmente incontrolável com nada menos do que um Real Lexer/Parser (tm).Imagine lidar com todas as possíveis interleavings de palavras-chave, identificadores, operadores, estranhas entre parênteses, estranhas ponto-e-vírgula, e comentários que são permitidos em algo como Verilog AMS, com expressões regulares e código de processo sozinho.

Não há como negar que há uma curva de aprendizado substancial lá, mas a escrita de uma gramática que você pode usar para flex e bison, e fazer algo de útil sobre a sintaxe árvore que sai do bison, vai ser muito melhor uso do seu tempo do que escrever uma tonelada de caso especial de seqüência de caracteres de código de processamento que mais naturalmente tratados com o uso de uma sintaxe de árvore em primeiro lugar.Também, o que você aprender a escrever dessa forma, será verdadeiramente ampliar seu conjunto de habilidades de maneiras que escrever um monte de hacky código Perl não é, por isso, se você tem os meios, eu recomendo ;-)

Também, se você é preguiçoso, confira Eclipse com plugins que fazem o realce de sintaxe e básico de refatoração para Verilog e VHDL.Eles estão em um incrivelmente estado primitivo, na última vez que verifiquei, mas eles podem ter a parte do código que você está procurando, ou pelo menos uma linha de base pedaço de código para olhar para informar melhor a sua abordagem na realização de sua própria.

Outras dicas

Eu escrevi um casal verilog analisadores e gostaria de sugerir PCCTS/ANTLR se o seu favorito de linguagem de programação C/C++/Java.Há um PCCTS/ANTLR Verilog gramática que você pode começar.O meu favorito gerador de analisador é Zebu qual é baseado no Common Lisp.

É claro que o grande trabalho é especificar todos os acúmulo de regras.Faz sentido fazer algum tipo de idioma para especificar o acúmulo regras bem.

Não subestime a quantidade de trabalho que vai para um a linter.A análise é a parte mais fácil, porque você tem ferramentas (bison, flex, ANTLR/PCCTS) para automatizar muito.

Mas uma vez que você tem uma análise, então o que?Você deve construir uma semântica árvore para o design.Dependendo de como é complicado o seu entradas, você deve elaborar o Verilog-AMS projeto (i.e.resolução de parâmetros, unrolling gera, etc.Se você usar esses recursos).E só então você pode tentar implementar regras.

Eu tinha seriamente considerar outras soluções possíveis antes de escrever um a linter, a menos que o número de usuários e o potencial de economia de tempo, assim, justificar o tempo de desenvolvimento.

Na tentativa de encontrar a minha resposta, eu achei essa mensagem em ANTLR - pode ser de uso

Se você usar o Java (e, portanto, uma IDÉIA), o IDE extensões personalizadas idiomas pode ser de uso

yacc/bison definitivamente dá-lhe uma perna, pois a boa acúmulo exigiria a análise do programa.Regex (verdadeiro regex, pelo menos) que podem abranger casos simples, mas é fácil escrever código que o regexes não jogo, mas são ainda mau estilo.

ANTLR parece ser um caminho alternativo para o mais comum (OK Eu ouvido falar antes) YACC/BISON abordagem, o que acontece também comumente usam LEX/FLEX como um front-end.

uma leitura Rápida do FLEX homem página tipo de me fazer pensar Que poderia ser o quadro que regex tipo de idéia..

Ok..Eu vou deixar esse ensopado de mais um pouco e ver o quão rápido eu posso construir um protótipo de analisador em um ou outro.

e um pouco mais

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