2008-08-26 5 views
10

우리 C++ 프로그램에서 사용자 정의 수식을 갖고 싶습니다. 예 : 값 v = x + (y - (z-2))/2. 나중에 프로그램에서 사용자는 x, y 및 z를 정의합니다. -> 프로그램은 계산 결과를 반환해야합니다.
나중에 수식이 변경 될 수 있으므로 다음 번에 수식을 구문 분석하고 새 값을 추가 할 때 수식이 변경 될 수 있습니다.

어떤 아이디어/힌트 어떻게 이런 식으로합니까?

지금까지 방정식을 계산할 수있는 파서를 작성해 보았습니다. 어쩌면 그것에 대한 아이디어가 있습니까?사용자 정의 수식 계산 (C++ 사용)

답변

3

자주 사용되며 향후 확장 될 예정인 경우 파이썬 또는 LUA를 코드에 추가하는 것이 좋습니다. LUA은 매우 가볍고 스크립팅 언어로서 새로운 기능, 연산자 등을 제공 할 수 있습니다.보다 강력하고 복잡한 작업을 수행하려면 파이썬을 사용하십시오.

0

Spirit (예 :)을 구문 분석 (예 : 평가할 수있는 표현 트리를 구성하기 위해 제공하는 '의미 론적 동작')을 사용하면 상당히 간단한 해결책처럼 보입니다. 예를 들어, 산수 표현 there에 대한 문법을 ​​찾을 수 있습니다 ... (직접 작성하는 것이 간단합니다).

참고 : 성령은 매우이며 배우기 쉽고 그러한 작업에 매우 적합합니다.

0

세 가지 구현과 그 일의 두 가지 방법으로, 일반적으로있다 : 당신은 자신에 감동 한대로

  1. , 도서관 수식을
  2. 을 평가하는 코드로 공식 집계는

두 번째 옵션은 일반적으로 일종의 플러그인으로로드 할 수있는 컴파일 작업을 수행하거나 별도의 프로그램으로 컴파일하여 필요한 출력을 생성하는 방식으로 수행됩니다.

C++의 경우 평가 용 라이브러리가 아마도 어딘가에 존재할 것이라고 생각합니다.

0

자신을 작성하려는 경우, "공식 오토마타"및/또는 "유한 상태 기계의 문법"일반적으로

무엇을 할 것인가하는 것은 당신이가는대로 스택에 문자를 밀어 문자열을 구문 분석입니다 검색 . 그런 다음 캐릭터를 튕겨 내고 시작된 것을 토대로 작업을 수행하십시오. 방정식을 역 마킹 표기법으로 강요하면 코딩하는 것이 더 쉽습니다.

1

수식을 연산 및 하위 표현식 트리로 나타낼 수 있습니다. 작업 유형 및 변수에 대한 유형 또는 상수를 정의 할 수 있습니다.

당신은 충분히 쉽게 당신이 전달 값간에 적절한 작업을 적용, 트리를 재귀 방법을 쓸 수 있습니다.

0

을, 여러분의 인생을 더 쉽게, 나는 이러한 종류의 입력이 가장 통해 이루어집니다지고 생각하려면 사용자가 입력 할 수있는 내용이 제한되어있는 GUI

명령 줄에서 수행 할 계획이라면 (즉, 내 게시물에서 얻은 인상), 허용 가능한 입력 집합을 엄격하게 정의해야합니다 (예 : 단 하나의 문자 변수, 공백 없음, 특정 수학 기호 : (+) */등).

그런 다음에해야합니다
이러한 작업을 수행
변수와 행동의 목록을 구축하기 위해 그것을 구문 분석 입력 char 배열에
읽기 -

1

BOMDAS 위해 구축하여

) 후위 표기법 (일반 compsci 할당) (나는)) 을 스택을 사용하는 값은 을 원하는)를 얻을 기다릴 줄에 삽입 사에서 방정식을 변환이에 대한 자신의 파서는 솔직 작업을해야한다 중첩 항목 스택을 가져 와서 변수의 값을 0-표시) 결과 표시

0

ANTLR을 사용하면 사용자 입력을 해석 할 파서/컴파일러를 생성 한 다음 방문자 패턴을 사용하여 계산을 실행할 수 있습니다. A good example is here이지만 C#에 있습니다. 필요에 따라 신속하게 적용 할 수 있어야하며 개발 플랫폼으로 C++를 사용하는 것이 좋습니다.

관련 문제