0

整理しなければならない大きなコードベースがあるので、プロセスを可能な限り自動化したいと考えています。自分のタスクに関連するすべての行を grep することはできましたが、タスク自体を自動化したいと考えています。

私がやろうとしているのは、次の例のように、すべての末尾の増分を先頭の増分に変更することです。

i++;

になる

++i;

私は正規表現が関係していると想像していますが、私はそれらにかなり慣れていません。また、これをスクリプト化するのに最適な言語はどれですか? 現在、私は Windows 7 x64 で作業していますが、プラットフォームに依存しないソリューションがクールです。また、この種の問題について詳しく学ぶための特定のリソースを教えていただければ、それは素晴らしいことです。

4

3 に答える 3

2

これはそれを行うでしょう...

s/([a-z0-9]+)\+\+/++$1/g

しかし、それは悪であり、次のようなものを壊します:

print "+++++++++Some heading++++++++++++\n";

i++ と ++i が実際に異なることを行う場合は言うまでもなく、i++ を使用する必要があります。

私の提案 (多くの場合、i++ が間違っていると考える本当の理由があると仮定して):

rgrep ++ * > fixme.txt

fixme.txt次に、お気に入りのテキスト エディターで開き、発生するたびに手動で調査し、テキスト ファイルから削除します。

于 2012-07-11T17:08:16.743 に答える
0

まず、[13.15] i++ と ++i のどちらがより効率的かを参照してください。 のようなプリミティブ型の場合int、効率は向上しません。ただし、これを知っていると仮定すると、解決策は使用するツールによって異なります。Perl を使用していた場合、つまり

perl -pi -w -e 's/search/replace/g;' *.cc

...次に、この正規表現が機能します。

s/\b([a-zA-Z]\w*)\+\+/\+\+$1/g

@Flimzy には同意しますが、これは非常に危険であり、自動化すべきではありません。

于 2012-07-11T17:18:28.987 に答える
0

私は以前にプロジェクトでこれを行ったことがあります。コードベースがリポジトリにある場合は、良い考えです。便利なことに、変更を実行してから、お気に入りのテキスト エディターにプロジェクトの差分をダンプして、すべての変更点を確認できます。ちょっと見ただけで、予期しない編集が行われたかどうかを確認でき、元に戻すことができます。

Flimzy が提案した正規表現を使用する以外に、このユース ケースに適合する小さなレクサー/パーサーを構築するという選択肢もあります。本格的なコンパイラを探しているのではなく、コメントと引用符に十分な状態を持つものを探しているだけです。

レックス&ヤック 2nd. エド。非常に小さい c コードを読み取るためのレクサーの例があり、このツール チェーンの威力を示しています。例は他の場所でも利用できると思います。複雑に見える場合は、Perl スクリプトで構築された単純なステート マシンと正規表現システムを使用して偽装できます。

最後に、 Python を使用したい場合はplyもチェックしてください。

于 2012-07-11T17:18:58.837 に答える