24

私の日常の仕事では、私と私のチームの他のメンバーは、Verilog-AMS で多くのハードウェア モデルを作成しています。Verilog-AMS は、主に商用ベンダーといくつかのオープンソース シミュレーター プロジェクトによってサポートされている言語です。相互のコードのサポートをより便利にする 1 つの方法は、共通の問題についてコードをチェックし、共有コードの書式設定スタイルの適用を支援する LINTER です。もちろん、私は独自のルールを追加できるようにしたいと考えています。その有用性を自分自身で証明した後、それをチームの他のメンバーに昇格させたいと思っています。他の既存プロジェクトの成果を活用したい。

yacc または bison 形式で許可された言語構文を使用すると、有利になりますか? それとも、各言語ステートメントを perl 文字列に吸い込み、パターン マッチングを使用して気に入らないものを見つける必要がありますか?

(ほとんどの構文エラーとコンパイル エラーは、商用ツールで簡単に検出できます。ただし、独自の拡張機能がいくつかあります。)

4

7 に答える 7

19

lex/flex および yacc/bison は、使いやすく、よく理解されたレクサーおよびパーサー ジェネレーターを提供します。たとえば、Perl で手続き的に行うのではなく、そのようなことを行うことを強くお勧めします。正規表現は、完全に固定された構造ではなく比較的固定された構造の文字列を引き裂くための強力なツールです。実際のプログラミング言語では、ステート マシンのサイズは、Real Lexer/Parser (tm) 以外では管理できなくなります。Verilog AMS などで許可されている、キーワード、識別子、演算子、不要な括弧、不要なセミコロン、およびコメントのすべての可能なインターリーブを、正規表現と手続き型コードのみで処理することを想像してみてください。

そこにはかなりの学習曲線があることは否定できませんが、flex と bison に使用できる文法を書き、bison から派生する構文ツリーで何か役に立つことを行うことは、そもそも構文ツリーを使用してより自然に処理される特殊なケースの文字列処理コードのトン。また、この方法で書くことを学べば、たくさんのハッキーな Perl コードを書くことではできない方法でスキルセットが本当に広がります。そのため、手段がある場合は、それを強くお勧めします ;-)

また、面倒な方は、Verilog と VHDL の構文の強調表示と基本的なリファクタリングを行う Eclipse プラグインを確認してください。それらは信じられないほど原始的な状態にあり、最後に確認しましたが、探しているコードの一部、または独自のロールを作成する際のアプローチをより適切に通知するために参照するコードの少なくともベースライン部分が含まれている可能性があります。

于 2008-09-19T05:50:49.373 に答える
2

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

しかし、パースを取得したら、次に何をしますか? 設計用のセマンティック ツリーを構築する必要があります。入力の複雑さに応じて、Verilog-AMS デザインを作成する必要があります (つまり、パラメーターの解決、生成の展開など。これらの機能を使用する場合)。そうして初めて、ルールを実装しようとすることができます。

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

于 2009-06-15T18:20:35.013 に答える
2

私はいくつかの Verilog パーサーを作成しました。お気に入りのプログラミング言語が C/C++/Java である場合は、PCCTS/ANTLR をお勧めします。開始できるPCCTS/ANTLR Verilog 文法があります。私のお気に入りのパーサー ジェネレーターは、Common Lisp に基づくZebuです。

もちろん、重要な仕事はすべての lint ルールを指定することです。linting ルールを指定するために何らかの言語を作成することも理にかなっています。

于 2008-11-16T21:23:48.810 に答える
0

私の答えを見つけようとして、ANTLRでこれを見つけました-役に立つかもしれません

于 2008-09-16T09:29:20.980 に答える
0

Java (および IDEA) を使用する場合は、カスタム言語用の IDE の拡張機能が役立つ可能性があります。

于 2008-09-16T09:30:15.563 に答える
0

yacc/bison良い linting にはプログラムの解析が必要になるため、確実に有利になります。正規表現 (少なくとも真の正規表現) は些細なケースをカバーするかもしれませんが、正規表現が一致しないがスタイルが悪いコードを書くのは簡単です。

于 2008-09-16T09:30:17.467 に答える
0

ANTLR は、より一般的な (前に聞いたことがある) YACC/BISON アプローチへの代替パスのように見えますが、フロント エンドとして LEX/FLEX を一般的に使用することも判明しています。

a FLEX の man ページをざっと読むと、その正規表現タイプのアイデアのフレームワークである可能性があると思います..

わかりました.. このシチューをもう少し長くしてから、いずれかでプロトタイプ パーサーをどれだけ迅速に構築できるかを見てみましょう。

そしてもう少し

于 2008-09-16T10:14:11.510 に答える