PL 재 미 있 네요.
단속 속 학 컴 파일 원 리 는 이전에 컴 파일 러 와 정규 표현 식 엔진 시 리 즈 를 쓴 지 꽤 되 었 습 니 다. 그리고 최근 에 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-statment := WHILE ( expr ) statment
일반 문법 분석 과정의 마지막 출력 은 모두 트 리 구조 이다
한편, 의미 분석 과정 에서 기호 표 라 는 데이터 구 조 를 빌려 야 한다. 이 기호 표 는 모든 식별 자 를 이미 알 고 있 는 정보 에 투사 해 야 한다.
중간 코드 의 생 성 은 보통 트 리 구 조 를 어 셈 블 리 에 가 까 운 중간 선형 형식 으로 번역 하지만 중간 형식 은 필수 적 이지 않 습 니 다. 예 를 들 어 예전 에 그 시리즈 에 C 의 해석 기 가 적 혀 있 었 습 니 다. 비록 부족 하지만 중간 코드 가 없 었 고 가상 컴퓨터 도 없 었 습 니 다. 문법 트 리 를 직접 옮 겨 다 니 며 해석 을 실 행 했 습 니 다.
작은 매듭
이 편 은 주로 몇 가지 범례 적 인 언어 와 번역 과정의 요약 을 말 하여 물고 기 를 만 지 는 것 에 대해 참회 한다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.