질문과 마찬가지로 저는 .Net 2.0을 회사에두고 있기 때문에 업그레이드 할 기회가 없습니다. .NET 2.0에서 Irony를 작동시키는 방법이 있습니까?.Net 2.0의 사용자 지정 언어 디자인에 Irony를 사용합니다.
나는 달성하려는 것을 간략히 설명하려고 노력할 것이다. 우리 회사에는 payroll 시스템이있어 고객이 payslip 항목에 대한 수식을 정의하게합니다. 이 수식은 Regex (매우 신뢰할 수 없음)를 통해 확인하는 몇 가지 키워드/함수를 사용해야합니다. 그런 다음 Microsoft 스크립트 컨트롤 개체를 만들고 eval 함수를 사용하여 스 니펫을 구문 분석합니다. 이 스 니펫은 차례대로 클래스에 정의 된 키워드/함수를 호출하여 출력을받습니다.
하지만이 시스템에는 단점이 있습니다. 때로는 오류가 발생하여 오버 플로우됩니다.
매우 바보 같은 예. -
FVAL(A)/(FVAL(B)+FVAL(C))
분명히이 수식이 통과합니다.
먼저 우리는 다음과 같이 검증 단계 - 어떤이 있는지 그리고 확인 키워드
의 미리 정의 된 ArrayList의에 존재하지 않는 사용 된 키워드가 있는지 여부를 정규식을 통해
확인 변수의 arraylist에없는 변수 (이 경우 - A, B, C는 1이다)가 사용됩니다. 모든 유효성 검사 후 통과하면
우리는 ScriptControlClass 객체의 eval 함수에 수식 문자열을 전달하며 (이 경우
FVAL()
을 고려) 거기에 정의 된 모든 기능을 정적 클래스를 추가하고 변수 인 경우이 함수는 부울true
을 반환 유효한 한 결과,이 식을 평가 한 후 지금
을 (false를 반환 할 날짜와 번호를 추가하는 등)이 문맥에서 사용하는 것입니다 - 왜 평가 후면 타입 변환 때문에 모든 부울 true
1
및 수행에 DivideByZeroException인지, 정상 ar 그것에 산술. 사실 돌아 가지 않고 우리가 실제로 각 변수의 값으로 구성 DataTable
에서 변수의 값을 반환 같이
FVAL(A)/(FVAL(B)+FVAL(C)) => 1/(1-1)
번째 단계
거의 유사하지만 임의의 유효성 검사를하지 않고있다.시스템은 오래되어 신경 쓰이게되고 정말 도움이 필요합니다. 제발 제안 해주세요.
[Spart] (http://www.codeproject.com/Articles/5676/Spart-a-parser-generator-framework-100-C#)는 어떻게 생각하십니까? 제 목적을 위해 스파트를 사용하도록 안내해 주시겠습니까? 나는 나의 필요에 충분하다고 생각한다.나는 "시작하기"기사없이 막 붙어있다. –
옵션에는 [많이] (http://stackoverflow.com/questions/5060583/code-parser-for-own-dsl-in-c-sharp) 있지만 구현 한 컴파일러 나 해석기는 없습니다 그 중 하나를 사용했습니다. 아이러니와 스파트는 모두 위대 할 수 있습니다. 개인적으로, 필자는 API를 배우는 것보다 재귀 적 시스템을 사용하여 간단한 문법을 처음부터 끝내는 데 드는 시간을 줄이는 데 충분하다고 썼다. –
질문에 게시 한 코드를 사용하여 문법의 예를 들어 줄 수 있습니까? –