다양한 알고리즘이 있습니다.
대체 1 : AST를 더 직선적 인 중간 표현으로 컴파일 할 수 있습니다. 귀하의 코드는 다음과 같이 컴파일 될 수 있습니다 :
a <- 3 * 2
b <- 5/2
c <- a - b
d <- 2 * 4
e <- c + d
return e
이것은 단지 일련의 명령이기 때문에 평가하기 쉽습니다. 명령어의 대부분은 X <- Y OP Z
형식이므로 평가자는 매우 간단합니다.
대체 2 : 대체 # 1을 기계어 또는 바이트 코드로 컴파일 할 수 있습니다.
li r3, 3
muli r3, 2
li r4, 5
divi r4, r5, 2
subf r3, r3, r4
li r4, 2
muli r4, r4, 4
add r3, r3, r4
blr
대안 3 : 당신은 # 1 그러나 모든 과제의 LHS입니다 독특한 유사하다 SSA, 또는 "단일 정적 할당"라는 특별한 형태로 대안 # 1을 컴파일 및 특수 수 있습니다 " phi "노드는 다른 분기의 값을 결합하는 데 사용됩니다. 그러면 SSA는 기계 코드 또는 바이트 코드로 컴파일 될 수 있습니다.
대체 4 : 재귀 적 강하로 AST를 평가할 수 있습니다. 이것은 Scheme/Lisp에 관한 대부분의 책에서 철저히 다루어진다.
대체 5 : 재귀 적 강하를 사용하여 코드를 스택 머신 코드로 변환 한 다음이를 평가할 수 있습니다. 뭔가 같이 :
push 3
push 2
mul
push 5
push 2
div
sub
push 2
push 4
mul
add
ret
대체 ∞ : 다른 기술의 많음이있다. 이 주제에 쓰여진 책은 두께가 입니다.