2012-04-26 20 views
1

さまざまなプログラミング言語(java/C/C++)で書かれたソースコードをトークン化できるライブラリはありますか? (識別子である関数の開始と終了のような部分を識別することができます)。私はソースコードを解析したくない、それはあまりにも複雑かもしれない。さらに、ソースコードにはエラーがないかもしれません。事前に感謝します。ソースコードをトークン化

+1

エラーのないコードサンプルでさえトークン化するのは簡単なことではありません。確かに「あらゆる言語」のために働くものは存在しません。あなたはおそらくあなたが解決しようとしていることについてもっと具体的にする必要があります。そうでなければ、フレックスやバイソンやANTLRで心地よくなることをお勧めします。 – sarnold

答えて

1

フレックス(Cの下)やJLex(Javaの下)のように、lexical analyzer(つまりレクサー)を使用してソースコードをトークン化することができます。 Java、C、およびC++をトークン化するための文法を取得する最も簡単な方法は、お気に入りのレクサーを使用してオープンソースコンパイラからコードを使用することです(ライセンス条件の対象となります)。たとえライセンス条件があまりにも厄介なものだとしても、それらは見通すために教育的でなければなりません。

ただし、解析することなく関数の開始と終了を識別することはできません。

+0

答えをありがとう。私はこれについて正確にはわからない同様の直感を持っています。ソースコードから最良のリターンを得るためには、各言語を個別に検討する必要があることが判明しました。普遍的な解決法はありません。 –

1

すべての場合にあります。たとえば、typedefの存在下でCまたはC++コードの解析をどのように変更するかを考えてみましょう。最初に識別子であるトークンをタイプ名として認識する必要があります。そうでないと、typedefを使用して宣言(関数を含む)を正しく認識できなくなります。いくつかの言語では、任意の演算子(新しいトークン)を定義できます。単純に病理学的なものもあります(Perlパーサ、またはブレース挿入規則を使ったHaskell '98の設計を試してみてください)。

+0

私はあなたに同意します。答えをありがとう。 –