2016-12-01 5 views

답변

1

이러한 방정식을 전사하는 알고리즘은 매우 간단합니다.

분명히 첫 번째 작업은 주어진 방정식을 reverse polish notation으로 변환하는 것입니다. 여기에서 이미 완벽하게 정의 된 실행 순서가 있습니다.

이제 피연산자에 대한 스택을 준비해야합니다. 이 시점에서 연산을 수행하고 피연산자 스택에 결과를 다시 저장하는 대신에 새로운 숫자로 새 TAC 명령어를 인쇄하고 결과 대신 스택에 해당 심볼을 다시 넣어야한다는 점을 제외하고는 일반 RPN처럼 처리합니다.

당신의 예에서 RPN은 다음과 같습니다 a b * c d * /

그래서 ab는 스택에 이동합니다. *이 발생하면 스택에서 2 개 항목을 팝합니다. t1 := a * b을 인쇄하고 t1을 스택에 넣습니다. 이제 우리는 더 RPN을 가로 질러 cd을 스택에 놓습니다. 이제 또 다른 *을 만나러 스택에서 2 개의 아이템을 팝핑하고 새로운 TAC 심볼 t2 := c * d으로 프린트하고 새로운 심볼 t2을 다시 스택에 놓습니다.

마지막으로 /이 발생하므로 스택에서 2 개 항목을 다시 가져 와서 새 기호를 만들어 인쇄하십시오. t3 := t1/t2.

이것은 표준 RPN 계산기보다 훨씬 간단합니다.