본문 바로가기
코딩연습/C#

[C#]식트리

by 호아니 2020. 6. 15.

식트리란?

식을 트리로 표현한 자료구조

 

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp16
{
    class Program
    {

        static void Main(string[] args)
        {
            /* 식트리 */
            //1*2+(x-y)

            Expression const1 = Expression.Constant(1);
            Expression const2 = Expression.Constant(2);

            Expression leftExp = Expression.Multiply(const1, const2); //1*2

            Expression param1 =
                Expression.Parameter(typeof(int)); //x를 위한변수
            Expression param2 =
                Expression.Parameter(typeof(int));//y를 위한 변수

            Expression rightExp = Expression.Subtract(param1,param2); //x-y

            Expression exp = Expression.Add(leftExp, rightExp);

            Expression> expression =
                Expression>.Lambda>(
                    exp, new ParameterExpression[]
                    {   (ParameterExpression)param1,
                        (ParameterExpression)param2 });
            Func func = expression.Compile(); //실행 가능한 코드로 컴파일
			//X=7,Y=8
            Console.WriteLine($"1*2+({7}-{8})={func(7, 8)}"); //컴파일한 무명함수 실행
			
   			
   			//람다식을 이용해 식트리를 만드는 예) 위와 동일한 실행결과
            Expression> ex =
                (a, b) => 1 * 2 + (a - b);
            Func func1 = expression.Compile();
            Console.WriteLine($"1*2+({7}-{8})={func1(7, 8)}");

        }

          
    }

 }