関数呼び出しのリストをテキストの置き換えに置き換えるには、C#(実際にはtranspiled Razor code)の非常に軽い解析を行う必要があります。関数式の照合と置換
{"Foo.myFunc" : "\"def\"" }
を含むセット与えられ、それは、このコード交換する必要がある場合:これで
var res = "abc" + Foo.myFunc(foo, Bar.otherFunc(Baz.funk()));
:
var res = "abc" + "def"
を私は、ネストされた表現を気にしないでください。
これは些細なようで、私はマッピング・セットのすべてのメンバーのためにこのようなものを使用して全体のC#のパーサを構築避けることができるはずだと思う:
- 表現開始(例えば
Foo.myFunc
) - を見つけます
Push()
/Pop()
括弧はStack
〜Count == 0
です。式として - マークこの式は
を停止しかし、多分私はする必要はありませんまで
編集: this answerへのコメントとしてtrollMe("(")
のようなものは、これらのアルゴリズムをオフにスローされますよう、単純にカウントブラケットは、一般的に十分ではありません示しています。真の解析だけで十分ですが、私は推測します(?)。
これは一回限りである場合は、ちょうどNのための正規表現を開始できませんでした、N-1、その後、括弧にマッチした...あなたはそれらすべてを持ってまで? –
これは[Roslyn](https://github.com/dotnet/roslyn)ライブラリの仕事のようです。 –
@IanMercerおそらく?それを行う方法がわからない... http://www.regular-expressions.info/recurse.html#balancedによると、.NETは再帰的な正規表現をサポートしていないが、適切なものでなければならない "バランスのとれた構造"をサポートしている。私はちょうどそれらを使用する方法を知らない。 – oligofren