c# - Mathos Parser-文字を演算子として使用する

原文 c# parsing math

Test1は失敗しますが、Test2は失敗しません。
これはMathos Parserがアルファベット文字を演算子として使用することを許可していないためですか?
または私が見逃しているものはありますか?

[TestMethod]
public void Test1()
{
    MathParser parser;
    parser = new MathParser();
    parser.OperatorList = new List<string>() { "a" };
    parser.OperatorAction.Add("a", (x, y) => x + y);
    Assert.IsTrue(parser.Parse("3a2") == (3 + 2));
}
[TestMethod]
public void Test2()
{
    MathParser parser;
    parser = new MathParser();
    parser.OperatorList = new List<string>() { "$" };
    parser.OperatorAction.Add("$", (x, y) => x + y);
    Assert.IsTrue(parser.Parse("3$2") == (3 + 2));
}
答え
@mike zは正しいです。デフォルトでは、3xが3 * xになるように、数字文字がある場合、パーサーは乗算記号を挿入します。同じことが、3(x + 2)が3 *(x + 2)となる場合にも発生します。

この機能が必要ない場合は、2番目のelse ifステートメントを次のように置き換えます。

                else if (Char.IsLetter(ch))
            {
                //if (i != 0 && (Char.IsDigit(expr[i - 1]) || Char.IsDigit(expr[i - 1]) || expr[i - 1] == ')'))
                //{
                //    tokens.Add("*");
                //}

                vector = vector + ch;

                while ((i + 1) < expr.Length && Char.IsLetter(expr[i + 1])) // here is it is possible to choose whether you want variables that only contain letters with or without digits.
                {
                    i++;
                    vector = vector + expr[i];
                }

                tokens.Add(vector);
                vector = "";
            }


注:Char.IsLetterOrDigitをChar.IsLetterに変更しました。これを実装すると、変数に数字を含めることができなくなります。

また、ロジックを少し変更して、乗算記号を挿入するようにすることもできます。ただし、変数名にaを含めることはできません。
関連記事

c# - mvc scaffolding rawをデータベースから削除

c# - ASP.NET Webアプリケーションをビルドして起動し、Microsoft CodedUIテストを効率的で時間のかからない方法で実行します

c# - マージフィールドを含むステートメントが機能しない場合のMicrosoft Word

c# - LINQ to SQL。実行時にテーブル名を変更する

javascript - MVCプロジェクトのアクションから返されたHTMLファイルのスクリプトへのパスが正しくありません

java - 相互互換性のためにC#暗号化をJava(Android)暗号化に変換するヘルプ

c# - Model3DCollectionとModel3DGroupの違いは何ですか?

c# - ASP.NET MVC(部分的なビュー)を使用して同じページにレビュー製品(http投稿)を追加しようとしています

c# - log4net翌日の開始時にログファイルを上書きする

c# - サービス時間を垣間見る方法