3

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

4

2 に答える 2

3

flex (C の場合) や JLex (Java の場合) などの語彙アナライザー(略して lexer)を使用して、ソース コードをトークン化できます。Java、C、および C++ をトークン化するための文法を取得する最も簡単な方法は、お気に入りのレクサーを使用してオープン ソース コンパイラのコードを使用することです (ライセンス条項に従います)。ライセンス条件が難しすぎると感じたとしても、それらは参考になるはずです...

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

于 2012-04-26T00:27:55.437 に答える
2

すべての場合ではありません。たとえば、C または C++ コードの解析がtypedef;の存在下でどのように変化するかを考えてみましょう。最初は識別子であるトークンは、後で型名として認識される必要があります。そうしないと、typedef. 一部の言語では、任意の演算子 (新しいトークン) を定義できます。一部は単純に病的です (Perl パーサーを設計するか、波括弧挿入規則が壊れている Haskell '98 を設計してみてください)。

于 2012-04-26T00:25:08.737 に答える