자바 c 컴 파일 과정
어법 분석
문법 분석
의미 분석
코드 생 성
어법 분석
어법 분석 은 소스 코드 의 문자 흐름 을 태그(Token)집합 으로 바 꾸 는 것 입 니 다.하나의 문 자 는 프로그램 작성 과정의 최소 요소 이 고 표 시 는 컴 파일 과정의 최소 요소 입 니 다.키워드,변수 명,글자 의 양,연산 자 는 모두 편집 이 될 수 있 습 니 다.예 를 들 어'int a+b=2'라 는 코드 에는 int,a,=,b,+,2 등 6 개의 태그 가 포함 되 어 있 습 니 다.키워드 int 는 세 글자 로 구성 되 어 있 지만 Token 일 뿐 더 이상 분리 할 수 없습니다.자바 c 의 소스 코드 에서 품사 분석 과정 은 com.sun.tools.자바 c.parser.scanner 류 에 의 해 이 루어 집 니 다.
문법 분석
어법 분석 기의 역할 은 자바 소스 파일 의 문자 흐름 을 대응 하 는 Token 흐름 으로 바 꾸 는 것 입 니 다.한편,문법 분석 기 는 품사 분석 기 를 나 누 는 Token 스 트림 구성 요 소 를 더욱 구조 화 된 문법 트 리 로 만 드 는 것 이다.즉,하나의 단 어 를 한 마디 로 조립 하고 완전한 문 구 를 만 드 는 것 이다.어떤 단어 가 조합 되 어 주어 이 고,어떤 것 이 서술 어 이 며,어떤 것 이 목적어 이 며,어떤 것 이 표준어 인지 등 은 더 이상 구분 하지 않 아야 한다. 문법 분석 은 Token 서열 에 따라 추상 문법 트 리 를 구성 하 는 과정 이다.추상 문법 트 리 는 프로그램 코드 문법 구 조 를 묘사 하 는 트 리 표현 방식 이다.문법 트 리 의 모든 노드 는 프로그램 코드 중의 문법 구 조 를 대표 한다.예 를 들 어 가방,유형,수정자,연산 자,인터페이스,반환 값,코드 주석 등 은 문법 구조 일 수 있 습 니 다.문법 분석 과정 은 com.sun.tools.javac.parser.Parser 류 에 의 해 이 루어 집 니 다.이 단계 에서 나 온 추상 적 인 문법 트 리 는 com.sun.tools.javc.tree.JCtree 류 에 의 해 이 루어 집 니 다.이 절 차 를 거 친 후에 컴 파일 러 는 소스 파일 을 조작 하지 않 고 후속 적 인 작업 은 모두 추상 적 인 문법 트 리 에 세 워 집 니 다.
어의 분석
『8195』문법 분석 을 한 후에 컴 파일 러 는 프로그램 코드 의 추상 적 인 문법 트 리 를 얻 었 다.문법 트 리 는 구조 가 정확 한 소스 프로그램의 추상 을 나 타 낼 수 있 지만 소스 프로그램 이 논리 에 부합 한 다 는 것 을 보장 할 수 없다.의미 분석 은 문법 트 리 를 바탕 으로 몇 가지 처 리 를 해 야 한다.예 를 들 어 클래스 에 기본 적 인 구조 함 수 를 추가 하고 변수 가 사용 하기 전에 초기 화 되 었 는 지 확인 하 며 상수 들 을 합 쳐 처리 하고 조작 변수 유형 이 일치 하 는 지 확인 하 며 모든 조작 문 이 도달 할 수 있 는 지 확인 하 며 checked exception 이 올 바 르 게 처리 되 었 는 지 확인 하 는 것 이다.『8195』의미 분석 단 계 는 기호 표를 채 우 고 레이 블 검사,데이터 와 제어 흐름 분석 으로 나 뉜 다.
기호 표를 채 우 는 것 은 8195°기호 표 는 기호 주소 와 기호 정보 로 구 성 된 표 로 독자 들 은 이 를 해시 표 K-V 값 이 맞 는 형식 으로 상상 할 수 있다.기호 표 에 등 록 된 정 보 는 컴 파일 의 서로 다른 단계 에서 모두 사용 해 야 한다.의미 분석 에서 기호 표 에 등 록 된 내용 은 의미 검 측 과 중간 코드 생 성에 사 용 될 것 이다.목표 코드 생 성 단계 에서 기호 명 에 대해 주소 분 배 를 할 때 기호 표 는 주소 분배 의 근거 이다.자바 c 소스 코드 에서 기호 표를 채 우 는 과정 은 com.sun.tools.javac.comp.Enter 클래스 에서 이 루어 집 니 다. 한 종 류 는 클래스 자체 가 일부 기호 변 수 를 정의 할 수 있다.예 를 들 어 클래스 이름,변수 이름과 방법 이름 등 이 있 고 일부 기 호 는 다른 종 류 를 인용 하 는 것 이다.이런 기 호 는 다른 유형의 방법 이나 변수 등 을 호출 할 수 있 고 일부 종 류 는 초 류 와 인터페이스 등 을 계승 하거나 실현 할 수 있다.이 기호 들 은 모두 다른 종류 에서 정 의 된 것 이기 때문에 이런 종류의 기호 도 기호 표 에 해석 해 야 한다. Enter 류 해석 이 단계 에서 또 하나의 중요 한 절 차 는 기본 적 인 구조 함 수 를 추가 하 는 것 이다.코드 에 구조 함수 가 제공 되 지 않 으 면 컴 파일 러 는 현재 와 일치 하 는 기본 구조 함 수 를 추가 합 니 다.
레이 블 검사 의 내용 은 변수의 유형 이 일치 하 는 지,변수 가 사용 하기 전에 초기 화 되 었 는 지,일반적인 방법 을 유도 할 수 있 는 매개 변수 유형,문자열 상수 의 합병(상수 접 기)을 포함한다.레이 블 검사 단계 에서 중요 한 동작 을 상수 접 기 라 고 합 니 다.만약 에 우리 가 코드 에 다음 과 같은 정 의 를 썼 다 면:
int a=1+2;
그러면 문법 트 리 에서 글자 의 양 1,2 와 연산 자+를 볼 수 있 습 니 다.그러나 상수 접 힌 후에 그들 은 글자 의 양 3 으로 접 힐 것 입 니 다.실 현 된 종 류 는 com.sun.tools.javac.cop.Attr 류 와 com.sun.tools.javac.cop.Check 류 입 니 다.
데이터 흐름 분석 은 주로 다음 과 같은 작업 을 완성 합 니 다.
4.567917.변 수 를 사용 하기 전에 정확 한 할당 여 부 를 검사 합 니 다
4.567917.방법의 반환 값 유형 을 확인 해 야 합 니 다.이 방법 은 반환 값 형식 이 확인 되 었 는 지 확인 하고 이 방법 을 받 아들 여 값 을 되 돌려 주 는 참조 형식 이 일치 하 는 지 확인 해 야 합 니 다.반환 값 이 없 으 면 참조 형식 이 가리 키 는 방법의 이 반환 값 이 있 을 수 없습니다
4.567917.모든 문장 이 실 행 됩 니 다.return 방법 뒤에 있 는 문구 가 있 는 지 확인 합 니 다.return 방법 뒤에 있 는 문 구 는 영원히 실행 되 지 않 기 때 문 입 니 다
제어 흐름 분석 은 주로 다음 과 같은 작업 을 완성 한다.
4.567917.쓸모없는 코드,예 를 들 어 영구 가짜 if 코드 블록 을 제거 합 니 다
4.567917.변수의 자동 전환,예 를 들 어 자동 으로 상 자 를 포장 하고 상 자 를 뜯 는 것 이다
문법 사탕 제거.해법 사탕 의 과정 은 desugar()방법 으로 촉발 되 며,com.sun.tools.javac.comp.TransTypes 와 com.sun.tools.javac.comp.Lower 류 에서 이 루어 집 니 다.데이터 흐름 및 제어 흐름 의 분석 입 구 는 flow()방법 이 고 구체 적 인 조작 은 com.sun.tools.javac.comp.Flow 류 로 이 루어 집 니 다
바이트 코드 생 성
『8195』는 com.sun.tools.javac.jvm.Gen 류 로 이 루어 집 니 다.바이트 코드 단 계 는 앞의 각 단계 에서 생 성 된 정보(문법 트 리,기호 표)를 바이트 코드 로 바 꾸 어 디스크 에 쓸 뿐만 아니 라 컴 파일 러 는 소량의 코드 추가 와 변환 작업 도 진행 했다.인 스 턴 스 구조 기 방법 과 클래스 구조 기 방법 은 바로 이 단계 에서 문법 트 리 에 추 가 된 것 이다.*8195:8195:자바 바이트 코드 를 생 성 하려 면 다음 과 같은 두 가지 절 차 를 거 쳐 야 합 니 다.
4.567917.자바 방법 중의 코드 블록 을 JVM 문법 에 부합 되 는 명령 형식 으로 바 꾸 고 JVM 의 작업 은 모두 스 택 을 바탕 으로 하 며 모든 작업 은 출구 와 발전 을 거 쳐 이 루어 져 야 합 니 다
jdk 1.5 이후 자바 언어 는 주석(Annotation)에 대한 지원 을 제 공 했 습 니 다.이 주석 들 은 일반적인 자바 코드 와 마찬가지 로 실행 기간 에 역할 을 발휘 합 니 다.Jdk 1.6 에서 삽입 식 주해 처리 기 를 제공 하 는 표준 API 는 컴 파일 기간 에 주 해 를 처리 합 니 다.우 리 는 이 를 컴 파일 러 의 플러그 인 으로 볼 수 있 습 니 다.이 플러그 인 들 에서 추상 적 인 문법 트 리 의 임 의 요 소 를 읽 고 수정 하 며 추가 할 수 있 습 니 다.이 플러그 인 들 이 주 해 를 처리 하 는 동안 문법 트 리 를 수정 하면 컴 파일 러 는 기호 표를 해석 하고 채 우 는 과정 으로 돌아 가 모든 삽입 식 주해 프로세서 가 문법 트 리 를 수정 하지 않 을 때 까지 다시 처리 합 니 다.주해 에 대한 처 리 는 기호 표를 채 운 후 주석 을 표시 하기 전에 발생 한다.
레 퍼 런 스
주지 명 지음
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.