PL 재 미 있 네요.

3536 단어
머리말
단속 속 학 컴 파일 원 리 는 이전에 컴 파일 러 와 정규 표현 식 엔진 시 리 즈 를 쓴 지 꽤 되 었 습 니 다. 그리고 최근 에 PLP 라 는 책 을 다 읽 었 습 니 다. 이 책 은 입문서 라 고 할 수 있 지만 저 에 게 는 큰 수확 을 거 두 었 습 니 다.그래서 최근 운영 체제 와 아웃 소 싱 을 배 운 물고 기 를 보완 하기 위해 이 책 을 읽 은 수확 을 쓰 고 싶다.졸렬한 제목 에 대해 사과 하 다
프로 그래 밍 언어의 계보
현재 의 새로운 언어 는 모두 한 줌 한 줌 나 오지 만 기본적으로 그들의 계산 모델 로 두 가지 로 나 눌 수 있다. 하 나 는 컴퓨터 가 무엇 을 하 는 지 에 더 관심 을 가 지 는 설명 식 이 고 하 나 는 컴퓨터 가 어떻게 하 는 지 에 더 관심 을 가 지 는 명령 식 이다.
일반적으로 함수 식 논리 식 언어 는 모두 설명 식 이 라 고 생각 하 는데, 포 노 이만 식 과 대상 을 대상 으로 하 는 것 은 모두 명령 식 으로 여 겨 진다.
함수 식
함수 식 은 함수 의 재 귀 정 의 를 바탕 으로 하 는 계산 모델 로 일반적으로 본질 적 으로 볼 때 함수 식 은 프로그램 을 입력 에서 출력 까지 의 함수 로 생각 하고 더욱 간단 한 함 수 를 사용 하여 점차적으로 세분 화 하 는 과정 을 통 해 정의 한다.
논리 식
논리 식 에서 전형 적 인 것 은 바로 Prolog 일 것 이다. 논리 식 은 일반적으로 계산 을 특정한 관 계 를 만족 시 키 는 값 을 찾 는 시도 과정 으로 간주한다.
포 노 이만 식
포 노 이만 식 의 가장 중요 한 것 은 부작용, 즉 레지스터 안의 값 을 수정 함으로써 후속 계산 에 영향 을 미 치 는 것 이다. 예 를 들 어 C 와 Fortran 은 모두 포 노 이만 식 에 속한다.
몇 가지 예
C 언어 가 최대 공약수 구 하 는 것 을 실현 하면 C 언어 편향 은 변 수의 값 을 교체 하고 반복 적 으로 수정 함으로써 이 루어 진 다 는 것 을 알 수 있다.
int gcd(int a, intb) {
    while (a != b) {
      if (a > b) {
        a = a - b;
      } else {
        b = b - a;
      }
    }
}

lisp 를 보면 입 출력 의 수학 관계 에 더욱 관심 을 가지 고 최대 공약 수 를 계산 하려 면 함수 에 대한 끊 임 없 는 확장 과 간소화 가 필요 하 다.
(define gcd
  (lambda (a b)
    (cond ((= a b) a)
          ((> a b) (gcd (- a b) b))
          (else (gcd (- b a) a)))))

C 나 자바 처럼 입문 한 사람 에 게 Prolog 를 보면 머리 가 커 질 수 있 습 니 다. Prolog 와 명령 식 의 사고 논리 가 완전히 다 르 기 때문에 논리 식 은 공리 와 검 측 규칙 을 제시 하 는 경향 이 있 습 니 다. 시스템 이 해당 하 는 합 리 적 인 가 치 를 제시 할 수 있 기 를 바 랍 니 다. 저도 이런 작은 절 차 를 이해 할 수 있 기 때 문 입 니 다.
gcd(A,B,G) :- A = B, G = A.
gcd(A,B,G) :- A > B, C is A - B, gcd(C,B,G)
gcd(A,B,G) :- B > A, C is B-A
gcd(C,A,G)

컴 파일 과 해석
다음은 두 가지 개념, 번역 과 해석 을 다시 보 겠 습 니 다.
컴 파일 은 일반적으로 한 언어 에서 다른 언어 로 의 번역 을 말한다. 고급 언어 든 어 셈 블 리 든 고급 언어 든 모두 컴 파일 이 라 고 할 수 있다. 해석 은 코드 를 직접 실행 하 는 것 이다. 그러나 현대 의 해석 기 는 일반적으로 가상 컴퓨터 명령 으로 번역 한 다음 에 가상 컴퓨터 에서 실행 하 는 가상 컴퓨터 도 있다.
자처 하 다
많은 언어의 컴 파일 러 는 모두 자신 이 컴 파일 한 것 이기 때문에 문 제 는 처음에 컴 파일 러 가 어떻게 컴 파일 되 었 느 냐 는 것 이다.
지금 자바 에 컴 파일 러 를 만 들 려 고 한다 면, 우 리 는 먼저 C 언어 로 자바 자식 집합 컴 파일 러 를 만 든 다음, C 언어 를 수 동 으로 이 자바 부분 집합 으로 번역 하면, 이 부분 집합 에서 자신 을 컴 파일 하여 실행 할 수 있 고, 그 다음 에 이 컴 파일 러 를 계속 확장 할 수 있 습 니 다.
컴 파일 개관
사실 이것 은 이전에 컴 파일 러 를 쓴 시리즈 가 가장 상세 하 게 말 했 는데 이 시 리 즈 는 필 기 를 써 서 실천 과 언어 디자인 을 결합 시 키 려 는 것 이다.
  • 품사 분석
  • 관련 어법 분석 은 문자 흐름 을 단어 흐름 으로 바 꾸 고 모든 단어의 정 보 를 기록 한 다음 에 컴 파일 러 가 잘못된 정 보 를 더욱 잘 생 성 할 수 있 도록 하 는 다른 정보 도 있다.
  • 문법 분석
  • 문법 분석 은 보통 하나의 개념 을 사용한다. 상하 문 은 문법 과 무관 하고 문법 형식 을 정의 하 는 데 쓰 인 다. 예 를 들 어 while 문 구 는 이렇게 표시 할 수 있다.while-statment := WHILE ( expr ) statment
    일반 문법 분석 과정의 마지막 출력 은 모두 트 리 구조 이다
  • 의미 분석 과 중간 코드 생 성
  • 문법 분석 은 소스 코드 문법 형식의 정확성 만 보장 하지만 다른 정확성 을 보장 할 수 없다. 예 를 들 어 정적 유형의 언어 는 컴 파일 할 때 유형 오 류 를 직접 감지 할 수 있다.
    한편, 의미 분석 과정 에서 기호 표 라 는 데이터 구 조 를 빌려 야 한다. 이 기호 표 는 모든 식별 자 를 이미 알 고 있 는 정보 에 투사 해 야 한다.
    중간 코드 의 생 성 은 보통 트 리 구 조 를 어 셈 블 리 에 가 까 운 중간 선형 형식 으로 번역 하지만 중간 형식 은 필수 적 이지 않 습 니 다. 예 를 들 어 예전 에 그 시리즈 에 C 의 해석 기 가 적 혀 있 었 습 니 다. 비록 부족 하지만 중간 코드 가 없 었 고 가상 컴퓨터 도 없 었 습 니 다. 문법 트 리 를 직접 옮 겨 다 니 며 해석 을 실 행 했 습 니 다.
  • 코드 최적화
  • 일부 코드 개선 은 기계 와 무관 하 다. 즉, 중간 형식 에서 최적화 할 수 있 지만 일부 코드 최적화 는 플랫폼 과 관련 된 것 이기 때문에 마지막 에 목표 언어 에 대한 최적화 가 필요 하 다.
  • 목표 코드 생 성
  • 코드 생 성 단 계 는 이전에 생 성 된 선형 구조 와 기호 표 정보 에 따라 목표 코드 에 대한 생 성 이다.
    작은 매듭
    이 편 은 주로 몇 가지 범례 적 인 언어 와 번역 과정의 요약 을 말 하여 물고 기 를 만 지 는 것 에 대해 참회 한다.

    좋은 웹페이지 즐겨찾기