2011-12-09 1 views
1

텍스트 파일의 문자열 유효성 검사를 많이하는 .NET 프로그램을 작성하고 있습니다. 사용자가 유효성 검사 규칙을 설정할 수 있도록 허용하여 많은 엣지 경우를 하드 코딩 할 필요가 없습니다. 당신은 내가 가진 그룹 것들을 할 수 있도록하려면 위에서 볼 수 있듯이 그래서런타임에 알 수없는 논리 조건을 파싱하는 C#.

IF KEY IS "X" AND VALUE IS "Y" RETURN NOTIFICATION 

(IF KEY IS "X" OR VALUE IS "Y") AND (IF SECTIONNAME IS "I") REPLACE "Y" WITH "J" 

예를 들어 나는 다음과 같은 것을 구상 (캡은 사용자가 작성됩니다 따옴표로 사용자의 작업을 제한하는 드롭 다운 항목 및 항목은 다음과 같습니다) 논리적 AND 및 OR을 사용하고 IF 문을 처리합니다.이 문은 모두 일부 진실/거짓 값으로 평가되어 일부 작업을 수행합니다. 내 질문은 데이터를 구문 분석하여 올바른 작업을 수행하고 올바른 그룹으로 구분할 수있는 가장 좋은 방법입니다. Google을 통해 아마도 추상적 인 구문 트리를 만들고 싶습니다. 그렇다면 실제로 간단한 예제를 통해 나를 시작할 수 없었을 것입니다.

도움을 주시면 대단히 감사하겠습니다.

답변

1

저는 파서 생성기를 아주 좋아합니다 (제 바이오 참조).하지만 때로는 과장입니다.

이 간단한 (부울 논리) 및 작은 일련의 동작 (예 : 사용자가 보여 준 것처럼)의 경우 재귀 적 파생 파서는 잘 수행해야합니다. 구문 분석에 의미 론적 작업을 짜면 AST가 필요하지 않습니다. 부울 방정식의 결과를 즉석에서 계산할 수 있으며 결과를 사용하여 구문 분석하기 전에 파싱 된 액션을 실행해야하는지 결정할 수 있습니다. 재귀 적 파생 파서는 왼쪽에서 오른쪽으로 작동하기 때문에 결과를 분석 할 수 있습니다. 따라서 규칙을 텍스트로 저장하고 필요에 따라 규칙을 실행할 수 있으며 사용자가 그 규칙을 입력 할 수 있습니다.

는 강력한 높이 평가하지만이 내가 찾고있는 하나입니다 지금까지 this SO answer on how to build a recursive descent parser by hand

+0

모든 답변을 참조하십시오! 뭔가를하는 도구가있는 경우 바퀴를 다시 만들려고하지는 않지만, 나는 무엇이 진행되고 있는지 경험적으로 이해하기를 선호합니다. 고마워! – Roger

0

Domain Specific Language을 생성하면 C#에서이 작업을 수행 할 수 있습니다 ... 기본적으로 언어의 문법이 어떻게 나타나고 올바른 구문 분석기가 작성되는지에 대한 설정 규칙을 작성합니다 너를 위해서.