간단한 (C와 유사한) 언어 용 컴파일러의 코드 생성 섹션을 작성하는 중입니다. "if"문에 문제가 있습니다. 나는 GCC와 마찬가지로 조건의 각 부분에 해당하는 점프 명령어를 생성하고 싶다. 부울 표현식의 구조를 유지하는 구조는 추상 구문 트리입니다.if 문에 대한 코드 생성
지금까지 필자는 비교와 논리적 및 논리적 부정을 위해 해당 레이블을 생성하는 함수를 작성했습니다. 그러나,이 기능을 논리적으로 또는 잘 작동 시키려고 할 때 커다란 문제가 있습니다. 간단한 문장에 대한
, 같은if (25 < 19) then
print 99
statements
으로 내가 같이 내 코드를 싶습니다
cmp 25, 19
jge label0
label1:
print 99
label0:
statements
(내 기능이 간단한 예를 들어 유사 디스플레이 무언가를).
부정을 처리 할 때 이러한 조건에 대한 테스트를 무효화하면됩니다 (jge를 위의 jl로 변환). 논리적 인 경우, 왼쪽 및 오른쪽 결합에 해당하는 코드를 순차적으로 순차적으로 생성하면됩니다. 그러나 OR의 경우 여러 가지 어려운 문제에 직면 해 있습니다. if (또는 다음 else 브랜치) 이후의 명령문으로 점프하는 대신, 조건이으로 실패하면 다른 모든 경우와 마찬가지로 OR 피연산자 중 하나가 있으면 코드가있는 실제 위치로 점프해야합니다 . 그렇다면 두 개의 OR이있을 때 AST는 이진 노드를 사용하는 OR를 나타 내기 때문에 은 번역을 시도합니다.이 중급 표현을 사용하면이 AST를 사용합니다.
누구든지이 문제에 도움을 주시겠습니까? 나는 또한 'Engineering a Compiler'에 대한 컨설팅을 시도했지만 거기에서 유용한 것을 찾지 못했습니다.
왜이 답변이 다운 보트를받을 자격이 되었습니까? –
나는 누가 당신의 코멘트를 downvoted 모르겠다. 이 기법을 알고 있지만 직접 점프를 생성하려고합니다. – user1890481