3 개 개의 어드레스 코드 :번역 - 나는 같은 특정 입력, 전사 것이다 알고리즘을 만들려고 노력하고
(a * b)/(c * d)
및 3AC이 같은 입력을 출력 할 것이다 :
t1: a * b
t2: c * d
t3= t1/t2
을
제안이있는 사람이 있습니까?
3 개 개의 어드레스 코드 :번역 - 나는 같은 특정 입력, 전사 것이다 알고리즘을 만들려고 노력하고
(a * b)/(c * d)
및 3AC이 같은 입력을 출력 할 것이다 :
t1: a * b
t2: c * d
t3= t1/t2
을
제안이있는 사람이 있습니까?
이러한 방정식을 전사하는 알고리즘은 매우 간단합니다.
분명히 첫 번째 작업은 주어진 방정식을 reverse polish notation으로 변환하는 것입니다. 여기에서 이미 완벽하게 정의 된 실행 순서가 있습니다.
이제 피연산자에 대한 스택을 준비해야합니다. 이 시점에서 연산을 수행하고 피연산자 스택에 결과를 다시 저장하는 대신에 새로운 숫자로 새 TAC 명령어를 인쇄하고 결과 대신 스택에 해당 심볼을 다시 넣어야한다는 점을 제외하고는 일반 RPN처럼 처리합니다.
당신의 예에서 RPN은 다음과 같습니다a b * c d * /
그래서 a
및 b
는 스택에 이동합니다. *
이 발생하면 스택에서 2 개 항목을 팝합니다. t1 := a * b
을 인쇄하고 t1
을 스택에 넣습니다. 이제 우리는 더 RPN을 가로 질러 c
과 d
을 스택에 놓습니다. 이제 또 다른 *
을 만나러 스택에서 2 개의 아이템을 팝핑하고 새로운 TAC 심볼 t2 := c * d
으로 프린트하고 새로운 심볼 t2
을 다시 스택에 놓습니다.
마지막으로 /
이 발생하므로 스택에서 2 개 항목을 다시 가져 와서 새 기호를 만들어 인쇄하십시오. t3 := t1/t2
.
이것은 표준 RPN 계산기보다 훨씬 간단합니다.