2012-01-25 2 views
1

다음 코드 단편을 고려하십시오. 표현식을 계산하는 방법

int sum = 0; 
sum = Expression.Evaluate("1+1"); 

경우 합계의 값 = 2

내가 값을 계산합니다 표현을 할 수 있지만, 내가 표현이 다음 프로그래밍 방식으로 구축 결과를 평가하는 것을 원한다. 내가 어떤 클래스 또는 네임 스페이스를 다루는 지 전혀 알지 못한다. 누구나 나를 도울 수 있습니다.

+0

'값을 계산하는식이 있습니다.' 그것은 당신이 제공 한 코드 조각이 예상대로 작동한다는 것을 의미합니까? '나는 그 표현이 프로그램 적으로 구축되기를 원한다. ' 입력 및 출력과 같은 예제를 제공 할 수 있습니까? – Azodious

+0

이 답변은 아마도 당신이 찾고있는 것입니다 : http://stackoverflow.com/a/53852/1106671 –

+1

가능한 복제본 [C# 표현식을 어떻게 동적으로 평가할 수 있습니까?] (http://stackoverflow.com/questions)/53844/how-can-i-evalu-ac-sharp-expression-동적으로). 중복으로 투표를 종료합니다. 그것이 숙제 인 경우 - 도움이 필요한 것에 대한 세부 사항을 표시하십시오. 그렇지 않으면 이전에 이미 다룹니다. –

답변

1

당신은 표현의 나무를 사용할 수 있습니다

표현 나무, 각 노드가 표현이다 나무 같은 데이터 구조, 코드를 나타냅니다 예를 들어, 메서드 호출 또는 X와 같은 이진 작동 < y.

표현 트리가 나타내는 코드를 컴파일하고 실행할 수 있습니다.

  • Expression Tree Basics

  • :이 문제는 System.Reflection.Emit를 사용하여 해결하고 MSIL 직접 작동하지만 결과 코드 작성하고 알아보기 힘들 수 있습니다 . Fast Lightweight Expression Evaluator을 : 약간의 검색 후

    , 난 당신이 코드 플렉스에 도망 체크 아웃하는 것이 좋습니다

    도망는 .NET 프레임 워크에 대한 식 파서 및 평가입니다. 은 런타임에에 sqrt (a^2 + b^2)와 같은 문자열 식의 값을 계산할 수 있습니다. 사용자 정의 컴파일러, 강력한 유형의 표현식 언어 및 경량의 코드gen을 사용하여 을 IL에 직접 컴파일합니다. 이는 표현식 평가가 매우 빠르며 효율적으로 임을 의미합니다.

    +0

    나는이 오래전에 한 번 http://jint.codeplex.com/을 사용했다. 하지만 이것은 단지 프로토 타이핑을위한 것입니다. –

    0

    람다를 사용하거나 System.Linq.Expressions 네임 스페이스의 클래스를 사용하여 프로그래밍 방식으로 작성하여 식 트리를 만들 수 있습니다.

    자세한 내용은 MSDN을 참조하십시오.

    0

    http://ncalc.codeplex.com을 보았습니까?

    확장 성이 뛰어나며 (예 : 자체 캐시가 있음) EvaluateFunction/EvaluateParameter 이벤트를 처리하여 런타임에 사용자 지정 함수와 변수를 제공 할 수 있습니다. 예는 구문 분석 할 수 연산 식 :

    Expression e = new Expression("Round(Pow(Pi, 2) + Pow([Pi2], 2) + X, 2)"); 
    
        e.Parameters["Pi2"] = new Expression("Pi * Pi"); 
        e.Parameters["X"] = 10; 
    
        e.EvaluateParameter += delegate(string name, ParameterArgs args) 
        { 
         if (name == "Pi") 
         args.Result = 3.14; 
        }; 
    
        Debug.Assert(117.07 == e.Evaluate()); 
    

    또한 유니 코드 & 많은 데이터가 기본적으로 입력 처리합니다. 문법을 바꾸려면 antler file이 함께 제공됩니다. 또한 새로운 기능을로드하기 위해 MEF를 지원하는 포크가 있습니다.

    또한 논리 연산자, 날짜/시간 문자열 및 if 문을 지원합니다.

    관련 문제