저는 C#으로 공학용 계산기를 만들고 있는데, 사용자가 항목을 추가 할 수있는 선형 함수 모음이 있습니다. 이 수학 함수의 사용법 및 기타 수학 함수를 확인하고 함수 이름과 함수 이름을 추적하고 (...)
에있는 수학 식을 미리 구문 분석하고 해당 수학 함수를 평가 결과로 대체해야합니다.선형 함수의 정규식 패턴
예를 들어이 표현을 가지고 : 나는 Regex Tester v1.5.3를 사용하여 테스트
abs(z)
avg(x, 5, Ans2)
my2ndFunc(y - (x * 2))
:
Ans1+(x*2)-(y^3)+abs(z)-avg(x, 5, Ans2)-my2ndFunc(y - (x * 2))
나는 내가 방정식이 일치 할 필요는 내 자신의 정규식을 썼다 하지만 어떤 항목과도 일치하지 않았습니다.
\b([a-z][a-z0-9]*)\((..*)\)\b
정규 어떤 표현이 함수와 일치하고, 함수 이름 및 매개 변수의 컨텐츠를 저장하는 것입니다 : 이것은 내가 사용하는 정규식? 또한 일치하는 방법에 대한 예제 코드를 제공하고 캡처 그룹의 콘텐츠를 가져 오는 것이 좋겠지 만 필요하지는 않습니다.
편집 나는 내가 입환 야드 알고리즘을 구현 muParser이 실제 수학 파서가 필요하지 않습니다. 난 그냥 간단한 검색을하고 대체해야합니다, 수학 파서가 실제 수학 돌봐, 난 그냥 정규식을 평가할 부분을 찾을 필요합니다. myfuncname(any content here)
가능 *이지만이 * (특이한 어려운 비 휴대용은이기는하지만)이 작업을 수행하는 정규 표현식 ** C# **에서, 나는 그것을 반대하고 대신 간단한 파서를 사용하는 것이 좋습니다. 이는 수식이 항상 정규 언어를 따르지 않을 수 있기 때문입니다. 예를 들어, 한 함수가 다른 함수의 입력으로 중첩되면 어떻게됩니까? 이것은 최근에 C#에서 과학적인 계산기 응용 프로그램을 작성한 사람으로부터 왔습니다. 날 믿어. 파서 (parser)를 사용하면 매우 보잘것 없다. –
@TylerCrompton 이전에 해본 적이있는 muParser 엔진을 사용하여 수학 수식 파싱을 처리하고 클래스에서이 함수에 대한 처리를 작성했습니다. 그리고 중첩 된 함수들에 대해서, 나는 단순히 미리 파싱 함수를 재귀 적으로 만들었다. 하지만 더 이상 프로젝트 파일을 가지고 있지 않아 내가 사용한 정규 표현식을 잊어 버렸습니다. –
백업, 남자. 백업. –