2012-03-19 4 views
0

関数名、マクロ、およびその定義を抽出するために、Cパーサーを開発する必要があります。私のアプローチはゼロから始めるのではなく、すでに関数とマクロを解析しているgeanyのようなCプログラムエディタにアクセスするだけでした。 は、このエディタの単純なAPIである可能性があります。 javaccを使用しているので、他のパーサが使用されています...私たちはどんなCプログラムエディタにもアクセスできますか?

この仕事はすでにエディタによって行われているので、簡単です。構築文法から始めるのは簡単ではありません。

このアプローチは簡単ですが、javaを介してapisにアクセスするエディタを見つけることができません。

+0

JavaがすべてのテキストエディタにAPIを提供するかどうか本当に尋ねていますか?短い答えは「いいえ」と思います。 –

+0

いいえ、彼は少なくとも1つがあるかどうか尋ねるつもりだったと思います。 – devsnd

+0

@twallは – Eregrith

答えて

1

何が

  1. ANTLR
  2. Lex
  3. Yacc
  4. JavaCC

あなたが見ることができ、既存さを探しています

+0

あなたの返事をありがとう、ああ、私はこの事を知っているので、私は他のプログラムエディタからJavaに提供されたAPIを使用してマクロと関数を取得することを考えていた。 –

0

私はすでにlex、flex、yacc、bisonなどを使っていますが、Perlにはそれを打つことはできません。さらに、Perl正規表現はJava、PHPで使用できます。

少なくとも、正規表現のような正規表現を使ってyaccで書くのではなく、PerlやPHPで数行で簡単に行うことができます。

+0

私は正規表現が大好きなので、自分のレクサーを作るためにperlを使いました。しかし、正規表現は文脈自由文法を解析することはできません。 –

+0

しかし、@ rockyit86の要件はPerlを使用することでほぼ満たされます。 – AgA

+0

は感謝が、これは私が望んでいたものではありません、私はすでにregualr式を使用してJavaで行われるのではなく、これ以外の簡単な方法を知りたいと思っている、 –

0

また、GCCコンパイラをカスタマイズするために、GCCプラグインまたはMELT拡張機能を開発することもできます。 (MELTはGCCを簡単に拡張するために開発したドメイン固有の言語です)。

あなたの目的のためにGCCをカスタマイズする利点は、GCCの正確な内部表現で作業することです。しかし、GCCは複雑であり、拡張するにはいくつかの作業が必要です(特に、複雑なGCCの内部表現とパスを部分的に理解すること)。

(GCCのプリプロセッサはまだプラグインのフックを持っていないので、それは、GCC 4.7でのマクロのために、おそらく、今日関数、変数やクラスのために可能ではない)

そして、私はあなたが正しいことを確認していませんgeanyに完全なCパーサーがあると信じています。私はいくつかのregexprベースのものがあると信じています。プリプロセッサのトリックを無視します。私はgeanyが気付いているとは思わない。複雑なマクロを展開することによって作成された関数や変数(GTK実装マクロなど)

+0

があるように思わたくないオブジェクトファイルからだろう非常に複雑な、私はそれを試してみよう、そうでなければ、多くのコードで、物事を行うの私のhackish方法で修正し、こことそこにブレーク:) –

+1

確かに複雑ですが、*解析**信頼性の高い** Cコード*あなたが想像しているものより複雑** **複雑です。本格的なCパーサーを必要としないなら、(ctagsのように)簡単な方法を受け入れることができます。要件を緩めることはあなた次第です。 –

+0

@ rockyit86 ctagsやetagsを使用するのは、実際には良いアイデアだと思いましたか? – Ben

0

Javaで書かれたCパーサーを持つIDEまたはプログラマー・エディターがいくつかあります。だから、彼らを得ることは

だけ言及し
  • NetBeans
  • プラグイン/拡張機能を作成し、使用する方法について数冊の本を持っている

    • Eclipse CDT :-)あまりにも恐ろしい(有名な最後の言葉ではありません二。彼らはどちらも、助けることができるかもしれないアクティブなユーザーコミュニティを持っています。

      彼らのCエディタは、関数を折りたたむことができるので、C構文をかなりよく理解しています。 EclipseのCエディタは定義を追跡しており、NetBeansもそうだと思います。私は関数本体を取得するにはCを解析するために必要な、そしてコードが構文的に正しいかどう

      個人的に、パーサ・開発・ツールを使用するにはあまりにも難しいことではないでしょう。 IIRC ANTLRには既にC文法があります。

    関連する問題