Archive/★ IT __이야기
1-pass / 2-pass Compiler의 차이점
anyjava
2009. 5. 10. 23:37
1-pass 컴파일러는 원시 프로그램을 한번만 읽어서 목적코드로 번역하도록 컴파일의 전 과정을 하나의 pass로 구현한 방법이다. 1-pass 컴파일러는 원시 프로그램을 한번만 읽어 가면서 번역을 하기 때문에 현재 번역되고 있는 위치에서 아직까지 번역하지 않은 부분으로의 분기(forward jumping)가 발생하는 경우 정확한 위치를 결정할 수 없기 때문에 빈칸으로 남겨 두었다가 계속되는 번역에서 정확한 정보를 얻었을 때 빈칸으로 남겨 두었던 부분을 채워 넣는 back patching을 필요로 하는 문제점이 있으나 원시 프로그램을 한번만 읽어서 직접 목적코드를 생성하므로 2-pass 컴파일러에 비해 컴파일 속도가 빠른 장점을 가진다.
2-pass 컴파일러는 입력 프로그램을 모두 두번 읽어서 목적코드를 생성하도록 구현된 컴파일러이다. 입력 프로그램을 첫번째 읽으면서 프로그램상에서 정의하고 사용된 심볼들에 대한 테이블을 먼저 생성한 후 두 번째 읽으면서 심볼 테이블의 정보를 이용하여 목적코드를 생성한다. 따라서, forward jumping과 같은 경우에도 2-pass 컴파일러에서는 back patching을 필요로 하지 않는다. 2-pass 컴파일러는 컴파일러를 기능적으로 독립된 여러 모듈로 구성할 수 있기 때문에 이식성(portability)이 높으며 중간코드를 이용한 최적화를 이용함으로써 특정 기계와 독립적인 최적화가 가능하며 프로그래머가 프로그래밍을 하는데 많은 융통성을 부여해 주는 장점이 있다. 반면, 두 번의 처리에 의해 목적코드를 생성하므로 한번의 처리에 의해 목적코드를 생성하는 1-pass 컴파일러보다 컴파일하는 속도가 느리다는 단점이 있으나, 다른 특징들로 인하여 일반적으로 2-pass 컴파일러를 많이 사용하고 있다.
출처
http://cafe.naver.com/comeonhakjum.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=1416
2-pass 컴파일러는 입력 프로그램을 모두 두번 읽어서 목적코드를 생성하도록 구현된 컴파일러이다. 입력 프로그램을 첫번째 읽으면서 프로그램상에서 정의하고 사용된 심볼들에 대한 테이블을 먼저 생성한 후 두 번째 읽으면서 심볼 테이블의 정보를 이용하여 목적코드를 생성한다. 따라서, forward jumping과 같은 경우에도 2-pass 컴파일러에서는 back patching을 필요로 하지 않는다. 2-pass 컴파일러는 컴파일러를 기능적으로 독립된 여러 모듈로 구성할 수 있기 때문에 이식성(portability)이 높으며 중간코드를 이용한 최적화를 이용함으로써 특정 기계와 독립적인 최적화가 가능하며 프로그래머가 프로그래밍을 하는데 많은 융통성을 부여해 주는 장점이 있다. 반면, 두 번의 처리에 의해 목적코드를 생성하므로 한번의 처리에 의해 목적코드를 생성하는 1-pass 컴파일러보다 컴파일하는 속도가 느리다는 단점이 있으나, 다른 특징들로 인하여 일반적으로 2-pass 컴파일러를 많이 사용하고 있다.
출처
http://cafe.naver.com/comeonhakjum.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=1416
반응형