2009-03-30 18 views
4

Pythonを使ってコメント用の.hファイルを解析する簡単な方法は?簡単な方法で<strong>コメント</strong>と<strong>Pythonの</strong>を使用してエンティティ名の<strong>C</strong>で書かれ<strong>の.h</strong>ファイルを解析する方法

既に開発された単語ファイルに内容を書き込むことを想定しています。

ソースコメントは、単純なタグスタイルのルールを使用してフォーマットされます。 コメントタグは、他のエンティティコメントと文書化されていないコメントとを簡単に区別するために使用されます。 コメントは複数行にすることができます。

//ENUM My comment bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla 
//  could be multi-line. Bla bla bla bla bla bla bla bla bla. 
enum my_enum 
{ 
    //EITEM My enum item 1. 
    //  Just could be multi-line too. 
    MY_ENUM_ITEM_1, 

    //EITEM My enum item 2 
    MY_ENUM_ITEM_2, 
}; 

//STRUCT My struct 
struct my_struct { 

    //MEMBER struct member 1 
    int m_1_; 
}; 

//FUNC my function 1 description. 
//  Could be multi-line also. 
//INPUT arg1 - first argument 
//RETURN pointer to an allocated my_struct instance. 
my_struct* func_1(int arg1); 

この解析の結果、コードとコメントのツリーが表示されるはずです。

サードパーティのライブラリを使用しないで、を迅速に作成する方法

答えて

3

ここではすばやく解決策があります。これは文字列のコメントを処理しませんが、これは問題ではないヘッダーファイルのためです。

S_CODE,S_INLINE,S_MULTLINE = range (3) 
f = open (sys.argv[1]) 
state = S_CODE 
comments = '' 
i = iter (lambda: f.read (1), '') 
while True: 
    try: 
     c = i.next() 
    except StopIteration: 
     break 
    if state == S_CODE: 
     if c == '/': 
      c = i.next() 
      if c == '*': 
       state = S_MULTLINE 
      elif c == '/': 
       state = S_INLINE 
    elif state == S_INLINE: 
     comments += c 
     if c == '\n': 
      state == S_CODE 
    elif state == S_MULTLINE: 
     if c == '*': 
      c = i.next() 
      if c == '/': 
       comments += '\n' 
       state = S_CODE 
      else: 
       comments += '*%s' % c 
     else: 
      comments += c 
print comments 
+0

ちょうど興味深い:これはちょうど今書きましたか? –

+0

ええ..殺す時間があった。ちょうど5分かかりました。 – eduffy

+0

バグ 'c == '\ n'の場合:state == S_CODE'に注意してください – klimkin

4

がない場合は、いくつかのより強力な選択肢があります。数回以上。

ここは、Pythonで書かれたC言語のパーサです。これから始める。

http://wiki.python.org/moin/SeeGramWrap

その他のパーサー。

http://wiki.python.org/moin/LanguageParsing

http://nedbatchelder.com/text/python-parsers.html

おそらく、任意のANSI C yacc文法をダウンロードして、あまり苦労せずPLY形式にそれを手直しし、ジャンプオフポイントとしてあることを使用することができます。

+0

もう1つ:http://code.google.com/p/pycparser/私は「迅速かつサードパーティーのライブラリがない」とは考えていません。Cには複雑な文法があり、文字列照合や正規表現などの素朴な方法で解析することはできません。 – bobince

+0

「サードパーティのライブラリを使用しない」という考え方は理解できません。それはすべてオープンソースです。サードパーティの問題、懸案事項、または問題が懸念されるのは何ですか? –

関連する問題