본문 바로가기

공부/compiler7

7. 수행 환경(Run-Time Environment) ★ 활성 레코드(Activation Record) - 한 procedure에 관한 정보를 모아놓은 것 - 임시 변수 : 식 계산중에 발생되는 임시 값 저장 - Local data : 지역적으로 사용되는 데이터 저장 - Saved machine status : 프로시저가 호출되기 바로 직전의 기계 상태에 대한 정보를 저장. - 접근링크 : 다른 활성 레코드에 있는 비지역 데이터를 참조하기 위해서 사용된다. - 제어링크 : 자신을 호출한 프로시저의 활성레코드를 가리킨다. - 실인자 ( Actual parameters) : 호출시 매개 변수가 전달되면 사용. 기계 레지스터를 통해 매개 변수를 전달한다. - 반환값 ( Returned values) : 호출한 프로시저로 결과 값이 전달될 때 사용한다. ★ 호출자.. 2011. 6. 14.
6. 중간코드 생성(Intermediate code generation) ★ 간단한 과정 high level language -> 중간 코드 -----> Machine/Assembly code ↑ 코드 최적화 ★ 3개 주소 코드 - x := y op z - x := op y - x := y - goto L - if x relop y goto L (만약 x가 y에 대한 관계 relop 를 만족하면 goto L로 아니면 goto L 다음 문장을 실행함) 즉, if~then~else. - param X1, param X2,.........paramXn call p, n 즉, P(X1, X2,......Xn) 함수호출이다. - x := y[i], x[i] := y - x := &y, x *y, *x := y ★ 3개 주소 문장의 구현 - 쿼드러플 : op, arg1, arg2, re.. 2011. 6. 14.
5. 구문 중심 번역 (Syntax-Directed Translation) ★ 구문 중심 번역의 개념적인 수행 과정 입력 기호열(tokens) -> 파스 트리(parse tree) -> 의존 그래프( dependency graph ) -> 의미 규칙의 평가 순서 ★ 합성 속성(Synthesized Attribute) - 상향으로(bottom up)으로 영향을 주는 속성 ★ 상속 속성(Inherited Attribute) - 하향으로(top-down)으로 영향을 주는 속성 & sibling이 영향을 줌 ★ 구문트리의 구성 2011. 6. 14.
4. 구문 분석 (Syntax Analysis) ★ 파서 만드는 절차 - Writing grammar - ambiguous 제거 (top down 이면 recursion 제거) - parsing table 생성 ex) E -> E + T | T T -> T * F | F (애매모호한 문장) F -> ( E ) | id E -> TE' E'-> +TE' | e T -> FT' (모호성과 왼쪽순환 제거) T'-> *FT' | e F -> ( E ) | id ★ FIRST & FOLLOW - FIRST는 말 그대로 FIRST가 무엇인지.. - ↑ grammar로 본다면 FIRST(E) = FIRST(T) = FIRST(F) = {(, id}, FIRST(E') = {+,e}, FIRST(T') = {*,e} - FOLLOW(E) = FOLLOW(E') = .. 2011. 6. 11.