공부/컴파일러2011. 8. 24. 20:48


중간언어는 단계가 세분화된 컴파일러의 각 모듈들을 연결시켜준다.
컴파일러를 기능적으로 독립적인 여러 모듈들로 구성하는 것이 가능해 졌다.
중간 코드를 이용한 최적화가 기계 코드에서의 최적화보다 효율적이다.
인터프리터를 사용해서 실생할 수 있다.

중간언어 형태에 따른 4가지 분류
Polish 표기법(Postfix 표현 등), 3-주소 코드, 트리 구조 코드(AST 등), 가상 기계 코드(U-코드 등)

중간언어 생성
파서가 구문분석을 수행하고 결과로 다음단계에서 필요한 의미정보를 구성하여 출력한다.
방법1
생성 규칙에 해당하는 의미 수행 코드를 직접 기술.
파서에 의해 호출되어 실행된다.
각 생성규칙이 reduce될 때마다 의미 규칙이 수행되어 중간코드가 생성.
하지만, 이 방법의 문제점은 파싱 도중에 에러가 일어난 경우 그 때까지 행한 의미 행동들이 모두 무의미해진다. 
방법 2
방법 1 문제를 보완. 다음 단계에서 필요한 정보들만 구성(AST)
AST를 이용해서 중간 언어를 생성한다.
AST는 파스트리에서 중복되는 부분을 제거한 것. 필요한 정보들만 포함 한 것.
파스트리를 만들 때, shift할 때 단말노드가 만들어지고 reduce할 때 서브트리가 만들어지지만 
AST는 shift할 때 단만노드를 만들고 의미있는 생성 규칙으로 reduce할 때 서브트리가 만들어진다.

'공부 > 컴파일러' 카테고리의 다른 글

LR 구문 분석  (0) 2011.08.24
LL 구문 분석  (0) 2011.08.22
구문 분석 (syntax analysis)  (0) 2011.08.22
context-free grammar  (0) 2011.08.20
regular language  (0) 2011.08.20


Posted by skyjumps