0

저는 Flex와 Bison을 사용하여 미니 Fortran 컴파일러를 작성하고 있습니다. 지금까지는 어휘 및 구문 분석을 마쳤습니다. 나는 유형 검사에서의 의미 론적 분석에있어 IR을 선택해야합니다. 내 타겟 컴퓨터는 MIPS입니다. 그래서 MIPS IAS에 기반한 최종 코드 생성을 원합니다. 그래서 저는 훌륭한 IR은 네 배를 믿습니다. 하지만 몇 가지 최적화를 소개하고 싶습니다. 그런 이유로 나는 해시 테이블을 사용하여 DAG 구조를 만들었습니다. IR에는 두 개의 경로가 있습니다 : quadruples 또는 DAG 및 quadruples.내 포트란 컴파일러의 중간 코드 생성 : DAG 또는 quadruples

DAG를 IR로 사용하는 경우 문에 백 패칭 방법을 어떻게 사용할 수 있습니까? 4 배로 쉬울 것입니다. 다른 방식의 DAG는 더 추상적입니다. 나는 그것을 4 배로 변환해야 할 것이다. 나는 그것을 안다. 내 두려움은 뒷받침하고있다.

답변

0

높은 수준의 디자인에 집중해야 할 때 낮은 수준의 세부 사항에 대해 걱정하고 있다고 생각합니다. 게다가, 현재의 컴파일러는 네 개를 사용하지 않고 SSA (Static Single Asignment)를 사용합니다. 최종 코드 생성을 위해 LCC 컴파일러를 살펴본 후 트리 매칭을 통해 로컬 최적 코드를 생성하는 간단한 방법을 사용합니다.

치트 (cheat)하는 방법은 C와 같은 고급 언어를 내보내고 컴파일러에 무거운 것을 올려 놓는 것입니다 (그리고 당신은 무료로 이식성을 얻습니다 ;-).

유즈넷 그룹 comp.compilers이 어떤 형태로 존재하는지 모르겠지만, FAQ이 내 첫 번째 정체가 될 것입니다. 아마도 끔찍한 날짜가 찍힌 것 같습니다.

+0

SSA에 대해 알고 있습니다 .LLVM GCC 이상. 내 수업 프로젝트를위한 컴파일러를 만들고있다. 구현의 문제는 공개되어 있습니다. 최종 코드의 경우 MIPS와 x86 중 하나를 선택해야합니다. 내가 정말 잘 안다면 MIPS와 함께 갈거야. 나는 사물의 질서에 대해 혼란 스럽다. 쿼드로 즉시 가서 DAG로 또는 DAG로 즉시해야합니까? 두 번째 경우에는 어떻게 백 패칭을 사용할 수 있습니까? – gon1332