2009-06-28 3 views
0

.NET에서 다음과 같은 경우에 간단한 파서를 쓰고 내가이 작업을 수행하기 위해 노력하고있어구문 분석 및 평가 주어진 조건

([PART3]function1() AND [PART4]function7()) OR [PART2]function90() 
  • [PART]이 거대한 텍스트가 있다는 평가 위치 (가정을 나타냅니다 파일, PART는 텍스트 파일을 큰 덩어리로 분리 함)
  • function()은이 쿼리를 통해 호출 할 수있는 문서화 된 함수입니다. 반환 true 또는 false
  • True/False 및 다른 연산자 사이에 결과를 결합하여 전체 입력에서 하나의 최종 True 또는 False를 반환하고 싶습니다.

.NET에서 그런 것을 구현하는 가장 좋은 방법은 내가 쉽게 통합 할 수있는 라이브러리가 있습니까? 아니면 간단한 구문 분석기를 작성한 다음 혼자서해야합니까?

P.S. 질문에 대한 좋은 제목을 찾을 수 없었습니다.

답변

1

간단한 조건처럼 보이므로 제 의견으로는 완전한 기능의 컴파일러 제작자가 필요하지 않습니다. 나는 당신이 Reverse Polish Notation을 들여다 보도록 제안 할 수 있습니다, 당신의 조건을 스택으로 푸는 데 사용하고 간단한 해석을 사용하여 결과 스택을 평가하십시오.

+0

나는 당신에게 동의한다. 그래서 나는 더 쉬운 해결책을 찾고있다. RPN을 살펴볼 것입니다. NET에서 라이브러리를 사용할 준비가 되었으면하지만 최후의 수단은 그것을 개발 중입니다 :) –

1

시도 Irony 아직 준비가되어 있지는 않지만 (아직) 약점이 있습니다.

아이러니는 .NET 플랫폼에서 언어를 구현하기위한 개발 키트입니다. C# 언어 및 .NET Framework 3.5의 유연성과 성능을 사용하여 완벽하고 새롭고 간소화 된 컴파일러 작성 기술을 구현합니다. 대부분의 기존 yacc/lex 스타일 솔루션과 달리 아이러니는 특수 메타 언어로 작성된 문법 사양의 스캐너 또는 파서 코드 생성을 사용하지 않습니다. 아이러니에서 타겟 언어 문법은 연산자 오버로딩을 사용하여 C#에서 직접 코딩되어 문법 구성을 표현합니다. Irony의 스캐너 및 파서 모듈은 구문 분석 프로세스를 제어하기 위해 C# 클래스로 인코딩 된 문법을 사용합니다.