Деревья выражений C # для калькулятора - PullRequest
1 голос
/ 13 февраля 2011

Я новичок в C #.Я хочу написать приложение калькулятор на C #.Могут ли деревья выражений C # быть хорошим способом разобраться в этом?(То есть часть, которая принимает последовательность нажатий клавиш и превращает их в выражение, которое калькулятор может оценить и отобразить на экране ... или графике.)

Я хочу включить стандартную математикуфункции, в том числе триг, журналы, показатели и т. д.

Ответы [ 2 ]

3 голосов
/ 13 февраля 2011

Поскольку ваш язык математических выражений, безусловно, будет намного, намного проще, чем C #, я подозреваю, что попытка повторно использовать классы дерева выражений фреймворка для представления ваших AST будет излишним и, вероятно, приведет к разочарованию; если вы посмотрите на эти классы, вы увидите множество свойств и функциональных возможностей, которые совершенно не имеют отношения к вашему маленькому языку. Я бы накатил твою на твоем месте.

0 голосов
/ 07 декабря 2011

вы могли бы поучиться у этого проекта, есть хорошие уроки, но как это было сделано

Вы видели http://ncalc.codeplex.com?

Это расширяемое, быстрое (например, имеет собственный кэш) позволяет вам предоставлять пользовательские функции и переменные во время выполнения путем обработки событий EvaluateFunction / EvaluateParameter. Примеры выражений, которые он может анализировать: Выражение e = новое выражение («Round (Pow (Pi, 2) + Pow ([Pi2], 2) + X, 2)»);

e.Parameters ["Pi2"] = новое выражение ("Pi * Pi"); e.Parameters ["X"] = 10;

e.EvaluateParameter + = делегат (имя строки, аргументы ParameterArgs) { если (имя == "Пи") args.Result = 3,14; };

Debug.Assert (117.07 == e.Evaluate ());

Он также обрабатывает Unicode и многие типы данных. Он поставляется с файлом рога, если вы хотите изменить грамматику. Существует также форк, который поддерживает MEF для загрузки новых функций.

Он также поддерживает логические операторы, строки даты / времени и операторы if.

...