2008-09-16 9 views
17

私の仕事で私と私のチームの他の人たちは、主に商用ベンダーやいくつかのオープンソースシミュレータプロジェクトでサポートされている言語であるVerilog-AMSに多くのハードウェアモデルを書いています。 お互いのコードをより役立つものにするのに役立つのは、一般的な問題のコードをチェックし、共有コードの書式設定スタイルを強制するのに役立つ小切手でしょう。 もちろん自分のルールを追加して自分の効用を証明してからチームの残りのメンバーに昇格させたいと思っています。 私は仕事をやることは気にしませんがコースはまた、既存の他のプロジェクトの作業を活用したいと考えています。リンターを書くには?

yacc形式やbison形式で許可されている言語構文を使用していますか? 私はそれぞれの言語文をperl文字列に入れて、パターンマッチングを使って好きでないものを見つけなければなりませんか?私の答えを見つけようとして

(。ほとんどの構文とコンパイルエラーが簡単に商用ツールによってキャッチされている..しかし、我々は我々自身のextentionsのいくつかを持っている)

答えて

14

フレックスLEX /とyacc/bisonの簡単に使用を提供し、lexer-十分に理解し、パーサジェネレータ、およびとは対照的に、私は本当にそのようなことをやってお勧めします手続き的に、例えばPerl。正規表現は、相対的な、しかし完全に固定された構造ではない文字列をリッピングするための強力なものです。実際のプログラミング言語では、あなたのステートマシンのサイズは、Real Lexer/Parser(tm)が足りないものでは扱いにくいものになります。 Verilog AMSのようなもので許可されているキーワード、識別子、演算子、余分な括弧、無関係なセミコロン、コメントのすべての可能なインタリーブを、正規表現と手続き型コードだけで扱うことを想像してください。

そこにはかなりの学習曲線があることは否定できないが、フレックスやバイソンに使用できる文法を書いて、バイソンから出てくるシンタックスツリーに役立つ何かをすることは、最初は文法ツリーを使ってより自然に処理される大文字の特別な文字列処理コードを書くよりも時間がかかりました。また、このように書くことを学ぶことは、ハックのあるPerlコードを書くことがまったくできないように、あなたのスキルセットを真に広げるでしょう。つまり、手段があれば、強くお勧めします;-)

また、あなたは怠け者です。構文の強調表示を行うEclipseプラグインと、VerilogとVHDLの基本リファクタリングを確認してください。彼らは信じられないほどプリミティブな状態にありますが、最後に私がチェックしましたが、あなたが探しているコードのいくつか、あるいはあなたのアプローチをよりよく伝えるために見ていくための少なくともベースラインのコードがあるかもしれません。

0

は、私がANTLR上でこれを見つけた - 使用であるかもしれません

+0

興味深いです。 – jbdavid

0

あなたはすべての(したがってIDEA)でのJavaを使用する場合は、IDEのextensions for custom languagesが良いリンティングは、プログラムを解析する必要になるので、

+0

私の "IDE"はCadence Library Manager + Neditで、Verilog-AとVerilog-AMSをサポートする独自のパターンを追加して、(組み込みの)Verilog構文の強調表示をしています。私がやっている仕事の種類については、Javaではあまり価値がありません。 – jbdavid

0

yacc/bisonは間違いなく、アップあなたの足を与える使用であるかもしれません。正規表現(真の正規表現、少なくとも)は、簡単なケースをカバーするかもしれませんが、正規表現がマッチしないがまだ悪いスタイルであるコードを書くのは簡単です。

0

ANTLRは、それはまた、一般的に、フロントエンドとしてLEX/FLEXを使用して判明し、より一般的な(OK は前にそれらについて聞いI)YACC/BISONアプローチへの代替パスになりそうです。

FLEXのmanページのクイック読み取りは、一種の

[OK]を..私は少し長く、このシチューもらおう、そして、どのように見..私はそれはアイデアの正規表現の種類のフレームワークかもしれないと思わせますすぐに私はプロトタイプパーサをどちらか一方に構築することができます。

と少し長く

2

私はいくつかのVerilogパーサーを書いています。好みのプログラミング言語がC/C++/JavaならPCCTS/ANTLRをお勧めします。あなたができるのはPCCTS/ANTLR Verilog grammarです。私の好きなパーサジェネレータはCommon Lispに基づいたZebuです。

もちろん、大きな仕事はすべての糸くずの規則を指定することです。 lintingの規則を指定するための何らかの言語を作成することは理にかなっています。

2

リンターに入る作業量を過小評価しないでください。構文解析は、その多くを自動化するためのツール(bison、flex、ANTLR/PCCTS)があるため、簡単な部分です。

しかし、いったん解析したら、何ですか?あなたはデザインのための意味木を構築しなければなりません。入力の複雑さにもよりますが、Verilog-AMSの設計(パラメータの解決、生成のアンロールなど)を行う必要があります。それでは、ルールを実装しようとするしかありません。

私は、ユーザーの数と潜在的な時間の節約が開発時間を正当化しない限り、リンターを書く前に他の解決策を真剣に検討しています。

+0

Amen。構文解析以外の汎用的な分析機器については、http://www.semanticdesigns.com/Products/DMS/DMSToolkitを参照してください。 DMSはカスタムツールを構築するために使用されます。それでも、VerilogAMSのためのリンターを構築することは、依然としてかなり大きな仕事になるでしょう。 –

関連する問題