2012-03-15 10 views
2

私はC関数の正規表現を試しています。emacs regexp C関数呼び出しを置き換えます。

func(blah blah); 

改行に改行を含めることができます。

私が試してみた:

改行をしませんでした
func([.+]); 

を、と:何かをするように見えた

func([...]); 
func([^...]); 

どちらも。私はの数字/タイプと私の最初のfunc();の間の文字を一致させる正規表現の部分を探していると思います。

+1

引数にカッコも含まれているとしたらどうなりますか?例えば'func(x *(y + z))'である。 –

+0

このインスタンスではあまり問題はありません – bph

+0

emacsには、明示的なregexpの必要性を回避してC関数の呼び出しをコメント/コメント解除するための '組み込み'がありますか? – bph

答えて

4

func[[:space:]]*([^)]*)を試すことができます。呼び出し中のネストされた括弧はそれを混乱させます。

3

ネストされた関数呼び出しがregular languageではないため、一般的なケースは正規表現では実現できません。

+0

ありがたいことに、それは一般的なケースではありません。自分のファイル(私が括弧をネストしていないことを知っている場所) – bph

1

マキシムの答えは具体的ですが、私はあなたが見つけた一致する機能で何かをしようとしていると推測します。深刻なコード処理を行うには、CEDETの一連のツールのセマンティックパーサーを打ち負かすことはできません。 http://cedet.sf.netもEmacsの一部です。

あなたはemacsの中でセマンティックパーサを使用する場合は、次のことができます。コードで

M-x semantic-mode RET 

、その後:

(semantic-fetch-tags) 

または

(semantic-current-tag) 

現在のタグを取得します。あなたがタグを持っていたら、呼び出すことができます。

(semantic-tag-function-arguments mytag) 

はタグの引数を、取得します。そのうちの1つについては、semantic-tag-nameを使用して名前を取得するか、semantic-tag-typeを使用してデータ型を取得します。

タグデータを取得したら、SRecodeで新しいコードを書くことができます。SRecodeは、タグを取り込み、関数宣言などのコードを吐き出すコードジェネレータです。