Рубрика «деревья выражений»
Expression: всё что нужно для старта
2025-07-29 в 13:16, admin, рубрики: expression, expression trees, деревья выражений, деревья выражений в c#
Основы деревьев выражений в .NET
2024-10-02 в 11:25, admin, рубрики: expression tree, expression tree visitor, expression trees, деревья выраженийДеревья выражений — одна из сложных тем в C#/.NET, которую необходимо понять. Они представляют код в виде древовидной структуры данных, где каждый узел является выражением (например, вызов метода, бинарная операция или константа). Они позволяют динамически создавать, исследовать и выполнять код во время выполнения.
Деревья выражений особенно полезны для создания динамического кода, анализа кода во время выполнения и для таких фреймворков, как LINQ to SQL и Entity Framework, для преобразования кода C# в SQL-запросы или другие операции.
Цитирование в языках программирования
2022-06-05 в 19:21, admin, рубрики: .net, C#, F#, SICP, деревья выражений, символические вычисления, цитированиеЗадача
Задачу я встретил, решая упражнения из книги Структура и Интерпретация Компьютерных Программ). Обычно её называют SICP (читается сик-пиЧитать полностью »
Оживляем деревья выражений кодогенерацией
2021-01-01 в 20:27, admin, рубрики: .net, C#, expression trees, fody, linq, module initializer, roslyn, source generators, uno, Visual Studio, xamarin, деревья выражений, кодогенерация, рефлексияДеревья выражений System.Linq.Expressions дают возможность выразить намерения не только самим кодом, но и его структурой, синтаксисом.
Их создание из лямбда-выражений — это, по сути, синтаксический сахар, при котором пишется обычный код, а компилятор строит из него синтаксическое дерево (AST), которое в том числе включает ссылки на объекты в памяти, захватывает переменные. Это позволяет манипулировать не только данными, но и кодом, в контексте которого они используются: переписывать, дополнять, пересылать, а уже потом компилировать и выполнять.
Парсер математических выражений C# — опыт дилетанта
2016-04-13 в 8:40, admin, рубрики: .net, C#, деревья выраженийКомпьютер и человек — как сложно нам понять друг друга. По сути, процесс программирования — это объяснение машине то, что ты от неё хочешь на понятном ей языке.
В качестве введения
По своей работе, да и в качестве хобби, я связан с процессом написания кода, связанного с математическими вычислениями. Одной из последних задач было написание ПО, в котором пользователь имел бы возможность самостоятельно вводить и использовать при расчёте, визуализации данных и оптимизации некоторых математических выражений. А учитывая свою природную лень и нежелание постоянно дополнять библиотеку кода специальных математических функций пришла в голову мысль — а почему бы не реализовать бредовую студенческую идею, и не изобрести велосипед парсера математических выражений.
Конечно, прежде чем взяться за изобретательский процесс (опять же, в виду вселенской лени), было достаточно долгое изнасилование Яндекса и Гугла на предмет уже существующих реализаций. И их нашлось конечно же не мало. Но к сожалению того, чего хотелось добиться от конкретной реализации не нашлось. А критерии поиска были следующие:
- Парсер должен быть реализован под .NET не старше 4.0;
- Он должен обрабатывать все базовые математические операторы (+,-,*,/,^, и т.п.) с учётом их приоритетов и скобок разных видов;
- Он должен распознавать основные функции (вроде sin, cos), иметь возможность добавлять в созданный объект парсера свои функции с указанием делегатов методов, вычисляющих их значение (для любого количества входных переменных);
- Должна быть возможность использования известных парсеру констант, и добавления их с список, используемый при разборе выражения;
- Должен присутствовать механизм работы с параметрами и переменными. При этом требуются переменные разных типов: просто хранящие числовое значение, либо вызывающие событие, в котором внешний код определяет их значение на момент их вызова;
- Должен быть реализован механизм функционалов (минимум — интегрирование, сумма ряда и дифференцирование)
- Результат разбора строкового выражения должен быть представлен в объектной модели бинарного дерева;
- Самое главное — бинарное дерево должно иметь возможность отображения на дерево Linq.Expression с последующей компиляцией его в делегат, выполняющий вычисление на скорости самой платформы .NET.
