28

最近、コーディング スタイルの点であらゆる場所にある R コードを扱っていることに気付きました。単一の構造に固執することについて厳密でない複数の作成者と個々の作成者です。現在よりも自動化したい特定のタスクがあります。

私は、次のタスクを管理するツール (またはツール) を探しています。リストは、希望の昇順でリストされていますが、存在に対する懐疑論の昇順でもあります。

  • 基本的なフォーマット。「if( foo )」を「if (foo)」に変換したり、ブレースの位置を統一したりとか。

  • リストアクセスのために "foo$blah" を "foo[["blah"]]" に変換します。理想的には、オブジェクトが実際にリストであり、data.frame ではないかどうかを少なくとも推測し、リストのみを変換できるようにすることができます。

  • 「=」を「<-」に変換しています。はい、これは単純な検索と置換ですが、実際にはそうではありません。ツール (または正規表現) は、"x = 5" を変換するが "foo(x=5)" を変換しないことを認識できるように、言語を認識する必要があります。また、単に記号を置き換えるだけでなく、代入演算子の両側に単一の空白を確保することも非常に便利です。

  • 特に関数とファイル間での変数の名前変更。たとえば、リストに要素「foo」があるとします。一度「foobar」に変更できれば、コード フロー全体でそのリストのすべての使用を追跡する必要がなくなります。これには、別の関数で別の名前として存在するリストなどを識別するために、ツールが制御フロー全体を実行できる必要があると思います。

  • 命名規則。標準的な命名規則 ( Googleなど) を定義し、すべての関数、変数などを識別して変換できるようにしたいと考えています。これは、リスト要素などの前のエントリと関連していることに注意してください。

基本的な unix 処理コマンド (例: sed) を自由にリストしてください。ただし、少なくとも通常は問題を起こさないほど十分にスマートである限り (例: "foo(x=5)" を "foo(x<-5)" に変換) 」)。

そのようなツールがすでに完璧な状態で存在していたとしたら、今では聞いたことがあると思います.Rのような言語では、これらの種類の変更を自動的に行うのは難しいことも認識しています.でも、夢は叶うよね?誰かがこれらのいくつか/すべてについての指針を持っていますか?

4

3 に答える 3

2

私見、自分で書いてください。きれいなプリンターを書くことは、実際には非常に困難です。トークン化、解析、AST またはその他の IR の構築、シンボル テーブルとスコープの追跡、テンプレート作成などを理解する必要があります。

しかし、それができれば、プログラミング言語全般について本当に多くのことを学ぶことができます。また、あなたは同僚にとても印象的に見えるでしょうし、履歴書を書くのは驚くべきことです. それはまたとても楽しいです。

Terence Parr 著の「 Language Implementation Patterns: Create Your Own Domain-Specific and General Programming Languages 」をお勧めします。少し読みにくいですが、内容はとても良いです。これはパーサーの入門レベルで書かれており、かなり短いですが、このツールを自分で作成するために必要なすべての部分が含まれています。

ビルドする場合は、オープンソースにして、ここに戻ってきてそれについて教えてください。広告をいくつか掲載してサイトを立ち上げて、数ドルを稼いでください。そうすれば、誰もがあなたの素晴らしい作品を使用でき、その過程で数ドルを得ることができます.

幸運を祈ります...

于 2012-03-28T07:57:17.967 に答える
0

私が知っている2つは次のとおりです。

https://github.com/ropensci/Rclean

https://github.com/moodymudskipper/refactor

于 2021-09-13T16:56:38.363 に答える