私はC#で小さなおもちゃのコンパイラのようなものを書いていますが、私がしようとしているのはprintコマンドで、 '$'文字で始まるすべての部分文字列です$ foo)、適切な変数に置き換えます。 (基本的に '$'文字は変数名を示します)。C#regexは変数を置き換えて逃げます
これまで行ってきたことは、regexを使って '$'文字を含む部分文字列をすべて見つけることですが、replaceメソッドに問題があります。変数の格納方法は、FLEEエバリュエーター変数格納クラスを使用します。 (FLEEは高速軽量式評価プログラムである)、キーが変数名であり、値が変数値であるマップとして機能します。次のように
私のコードは次のとおりです。
public void print(string exp)
{
this.expression = exp;
MatchEvaluator eval = new MatchEvaluator(this.matchEval);
MatchCollection coll = Regex.Matches(exp, @"(?<!\w)\$\w+");
this.split = new string[coll.Count];
int index = 0;
foreach (Match match in coll)
{
this.split[index] = match.ToString();
index++;
}
this.i = 0;
Regex.Replace(exp, @"(?<!\w)\$\w+", eval);
Console.WriteLine(exp);
Console.ReadKey();
}
private string matchEval(Match m)
{
this.split[this.i] = this.split[this.i].TrimStart('$');
if(i != split.Length-1)
this.i++;
return this.split[this.i];
}
それはまだ正規表現は「$」文字を含めて一致して返すように、それはまだ変数を返しません。
ご協力いただければ幸いです。ありがとうございます。
それはすべきではない:EXP = Regex.Replace(EXP、@ "?!(<\ w)は\ $ \ + W"、evalの); ? –