Теперь займемся генератором. Вернее подход будет несколько другим. Я разрабатывал внутренний язык, который будет использоваться внутри .NET приложения, т.е. необходимо выполнить инструкцию написанную на этом языке. И тут к нам на помощь придут Expression trees. Теперь подробнее...
Expression trees - это объектное представление языкового кода, например 2 + 2 дерево состоит из корня операции + и двух дочерних численных узлов 2. Лямбда выражение в .NET тоже expression tree. Например уже приведенное лямбда выражение, которое принимает параметр 2, выглядит вот так:
- Expression<Func<int, int>> expression = argument => argument + argument;
- ParameterExpression argument = Expression.Parameter(typeof(int), "argument");
- BinaryExpression summ = Expression.Add(argument, argument);
- Expression<Func<int, int>> expression = Expression.Lambda<Func<int, int>>(summ, new[] { argument });
- Func<int, int> func = expression.Compile();
- Console.WriteLine(func(2));
В целом, я действительно проторчал от Expression trees в .NET, очень классная штука, на заметку всем, кто хочет использовать какой-нибудь внутренний dsl язык в своём приложении.
Комментариев нет:
Отправить комментарий