프로그래밍 언어의 구현
- 프로그래밍 언어 정의란 어떤 프로그램이 올바른 형태인지, 또 올바른 형태의 프로그램을 실행하였을 때 어떻게 실행되는 것이 올바른 것인지 규정하는 것을 뜻함
- 프로그래밍 언어의 형태에 관한 규정을 구문, 실행 결과에 관한 규정을 의미라고 함
- 프로그래밍 언어의 구현이란 그 프로그래밍 언어로 작성된 프로그램을 수행하는 프로그램
- 프로그래밍 언어 L의 구현 -> 1) PL이 L의 구문 규칙을 따르는 올바른 프로그램인지 검사 2) 올바른 경우 PL을 입력으로 받아서 L의 의미 규칙에 따라 실행
- CPU의 함수 모형 : M[PM] = out -> M[[CompL[[PL]]]](in) = out
- 프로그래밍 언어 구현의 함수 모형: L[PL] = out
- 인터프리터 함수 모형: IntL[PL] = out
- 컴파일러 함수 모형: CompL[[PL]] = PM
- 인터프리터: 프로그램을 받아서 해석하여 실행함
- 컴파일러: 고수준 프로그램을 저수준 프로그램으로 번역하여 실행함
- 하이브리드 구현: 인터프리터와 컴파일러의 결합
- 전통적인 프로그래밍 언어 구현 -> 대상: 명령형 언어, 절차형 언어, 객체지향 언어 -> 기계어를 확장하는 형태로 구현
- 새로운 패러다임의 언어 구현 -> 대상: 함수형 언어, 논리 언어 -> 구현 모델을 추상 기계로 만들어 징검다리 삼아 구현
- 명령형 언어: 저급언어의 연산과 명령어를 확장하는 형태로 구현
- 절차형 언어: 사용자 정의 연산(함수)과 사용자 정의 명령어(프로시저)를 지원하는 형태로 구현
- 객체지향 언어: 자료형에 함수 및 프로시저를 연관시킴으로써 사용자 정의 자료형을 지원하는 형태로 구현
- 언어별 계산 모델 -> 함수형 언어: 람다, 논리 언어: 연역 논리
- 추상기계라는 용어 대신 가상기계라는 용어도 사용
- 컴파일러 구현단계는 크게 분석단계와 생성 단계로 나누어 생각해볼 수 있음
- 분석 단계는 구현할 프로그래밍 언어에 종속적인 단계
- 구문 분석 단계를 거치고 나면 프로그램은 트리 형태로 변경. 이를 구문 트리라고 부름
- 구문 분석 단계 후에 해당 트리가 올바른 형태인지 파악하는 것이 바로 의미 분석 단계
- 생성 단계는 목적 기계에 종속적
- 인터프리터 구현 단계 : 컴파일러 구현 단계의 분석 단계를 그대로 포함, 중간 표현을 순회하며 프로그램 수행, 프로그래밍 언어의 문장 단위로 해석
- 구문 트리: 언어 구현 단계의 중심을 차지, 분석 단계의 전 과정을 관통
- 심볼 테이블(컴파일러 구현) -> 식별자 정보 (타입, 선언 위치등)을 저장
- 인터프리터의 경우에는 식별자의 값 정보를 알아야 하기 때문에 심볼테이블보다 확장된 형태의 테이블이 필요한데, 이를 환경이라고 부른다.
- 환경의 핵심 정보는 '값'을 알 수 있다는 것
- 환경(인터프리터 구현) -> 값 정보를 포함한 식별자 정보를 저장
- 심볼 테이블: 컴파일러 구현에 사용되며 식별자의 자료형 정보, 선언 위치 등을 포함, 환경: 인터프리터 구현에 사용되며 식별자의 여러 정보와 함께 값 정보도 포함하고 있음
- 인터프리터가 환경을 필요로 하는 것처럼 컴파일러도 실행시 환경을 필요로 하는데 이를 실행 환경이라고 부름
- 정적 세그먼트: 코드와 정적 데이터로 구성되며, 정적 데이터는 주소가 미리 결정되어 있는 변수 공간으로 이루어짐
- 동적 세그먼트: 스택과 힙으로 구성되며, 스택은 서브프로그램의 활성 레코드 관리에, 힙은 수동 할당 변수 공간으로 사용됨
- 레지스터: 코드 세그먼트를 가리키는 PC, 스택을 가리키는 SP 및 FP를 비롯한 전용 레지스터와 더불어 여러 범용 레지스터로 구성됨
- 어휘 분석기는 프로그램의 어휘를 구별해 내고 속성을 구하여 구문 분석기에 전달
- 어휘 종류를 토큰이라 하며, 예약어, 리터럴, 연산자 등
- 어휘 구조가 복잡한 경우 대부분 유한 상태 기계를 구성하여 구현하는데, 어휘 분석기에 사용되는 유한 상태 기계를 특별히 유한 오토마타 라고 부르기도 함
- 구문 트리는 두 가지 형태 중 하나로 결정되는데 하나는 파스 트리이며 하나는 조금 더 압축된 형태의 추상 구문 트리임
- 파스 트리는 문법에 대한 정보를 모두 표현, 추상 구문 트리는 번역에 필요한 정보만 간추려 포함
- 순환 하강 구문 분석기는 문법 규칙을 그대로 코드로 바꾼 형태로 구문 트리를 순회하는 여러 프로시저로 구성된 프로그램
- 순환 하강 구문 분석기 1단계는 각 비단말 기호의 문법 규칙에 대해 하나의 프로시저를 만들되, 우변을 모사하도록 프로시저를 만듬
- 순환 하강 구문 분석기 2단계는 우변을 모사할 때 단말 기호는 일치 검사, 비단말 기호는 해당 프로시저를 호출
문제
문제 1
프로그래밍 언어의 구현에서 '구문'이란 무엇인가?
- 프로그램이 실행되는 방식을 규정하는 것
- 프로그램의 형태에 관한 규정
- 프로그램을 수행하는 프로그램
- 프로그램의 데이터 타입과 변수 이름
정답: 2
해설: 프로그래밍 언어의 '구문'은 프로그래밍 언어의 형태에 관한 규정을 의미한다.
문제 2
컴파일러의 주요 역할은 무엇인가?
- 프로그램을 해석하여 실행한다.
- 고수준 프로그램을 저수준 프로그램으로 번역한다.
- 프로그래밍 언어의 문장 단위로 해석한다.
- 트리 형태로 프로그램을 변경한다.
정답: 2
해설: 컴파일러는 고수준 프로그램을 저수준 프로그램으로 번역하여 실행하는 역할을 한다.
문제 3
인터프리터의 역할은 무엇인가?
- 프로그램을 번역 없이 직접 실행한다.
- 프로그램을 저수준 언어로 변환한다.
- 트리 형태로 프로그램을 변환한다.
- 프로그램의 정적 데이터를 관리한다.
정답: 1
해설: 인터프리터는 프로그램을 받아서 해석하여 직접 실행하는 역할을 한다.
문제 4
'명령형 언어'의 구현 방식은 무엇인가?
- 함수 및 프로시저를 연관시킨 자료형을 지원한다.
- 저급언어의 연산과 명령어를 확장한다.
- 람다 계산을 기반으로 한다.
- 연역 논리에 기반을 둔다.
정답: 2
해설: 명령형 언어는 저급언어의 연산과 명령어를 확장하는 형태로 구현된다.
문제 5
어휘 분석기의 주요 기능은 무엇인가?
- 구문 트리를 생성한다.
- 프로그램의 어휘를 구별하고 속성을 구한다.
- 프로그램의 실행 환경을 구성한다.
- 고수준 언어를 저수준 언어로 변환한다.
정답: 2
해설: 어휘 분석기는 프로그램의 어휘를 구별하고 속성을 구하여 구문 분석기에 전달하는 역할을 한다.
문제 6
구문 트리에서 '파스 트리'와 '추상 구문 트리'의 차이점은 무엇인가?
- 파스 트리는 모든 문법 정보를 표현하고, 추상 구문 트리는 필요한 정보만 포함한다.
- 추상 구문 트리는 모든 문법 정보를 포함하고, 파스 트리는 필요한 정보만 포함한다.
- 파스 트리는 트리 구조를 사용하지 않는다.
- 추상 구문 트리는 프로그램의 실행 순서를 나타낸다.
정답: 1
해설: 파스 트리는 문법에 대한 모든
정보를 표현하는 반면, 추상 구문 트리는 번역에 필요한 정보만 간추려 포함한다.
문제 7
순환 하강 구문 분석기의 첫 단계에서 수행되는 작업은 무엇인가?
- 프로시저를 호출하여 비단말 기호를 모사한다.
- 각 비단말 기호에 대한 프로시저를 만든다.
- 구문 트리를 생성한다.
- 어휘 분석기를 구현한다.
정답: 2
해설: 순환 하강 구문 분석기의 첫 단계에서는 각 비단말 기호의 문법 규칙에 대해 하나의 프로시저를 만든다.
문제 8
'환경'이란 인터프리터 구현에서 무엇을 의미하는가?
- 구문 트리의 구조
- 식별자의 값 정보를 포함한 정보를 저장하는 테이블
- 프로그램의 정적 세그먼트 구성
- 어휘 분석기의 출력 결과
정답: 2
해설: '환경'은 인터프리터 구현에서 식별자의 값 정보를 포함한 정보를 저장하는 테이블을 의미한다.
문제 9
구문 분석 단계 후에 수행되는 '의미 분석' 단계의 목적은 무엇인가?
- 트리 형태로 프로그램을 변경한다.
- 해당 트리가 올바른 형태인지 파악한다.
- 프로그램을 저수준 언어로 변환한다.
- 프로그램의 어휘를 구별한다.
정답: 2
해설: 의미 분석 단계는 구문 분석 단계 후에 해당 트리가 올바른 형태인지를 파악하는 과정이다.
문제 10
'정적 세그먼트'는 무엇으로 구성되어 있는가?
- 스택과 힙
- 코드와 정적 데이터
- 어휘 분석기와 구문 분석기
- 실행 환경과 프로시저
정답: 2
해설: 정적 세그먼트는 코드와 정적 데이터로 구성되어 있으며, 정적 데이터는 주소가 미리 결정되어 있는 변수 공간으로 이루어져 있다.
문제 11
'하이브리드 구현'에서 인터프리터와 컴파일러의 결합이 의미하는 것은 무엇인가?
- 프로그램을 트리 형태로 변환한다.
- 고수준 언어를 직접 실행한다.
- 고수준 언어를 저수준 언어로 부분 번역 후 실행한다.
- 식별자의 값을 관리한다.
정답: 3
해설: 하이브리드 구현은 고수준 프로그램을 저수준 언어로 부분 번역한 후 해당 부분을 실행하는 방식을 의미한다.
문제 12
'함수형 언어'와 '논리 언어'의 구현 모델 차이는 무엇인가?
- 함수형 언어는 람다 계산을, 논리 언어는 연역 논리를 기반으로 한다.
- 함수형 언어는 연역 논리를, 논리 언어는 람다 계산을 기반으로 한다.
- 두 언어 모두 람다 계산을 기반으로 한다.
- 두 언어 모두 연역 논리를 기반으로 한다.
정답: 1
해설: 함수형 언어는 람다 계산을 기반으로 하고, 논리 언어는 연역 논리를 기반으로 한다.
문제 13
컴파일러 구현의 '분석 단계'와 '생성 단계'의 주요 차이는 무엇인가?
- 분석 단계는 구문 트리를 생성하고, 생성 단계는 트리를 저수준 언어로 변환한다.
- 분석 단계는 어휘를 분석하고, 생성 단계는 구문을 분석한다.
- 분석 단계는 프로그램을 해석하고, 생성 단계는 실행한다.
- 분석 단계는 의미 분석을, 생성 단계는 구문 분석을 수행한다.
정답: 1
해설: 분석 단계에서는 구문 트리를 생성하고, 생성 단계에서는 이 트리를 저수준 언어로 변환하는 작업을 수행한다.
문제 14
인터프리터 구현에서 '환경'의 주된 역할은 무엇인가?
- 구문 트리의 구조를 정의한다.
- 프로그램의 실행 환경을 설정한다.
- 식별자의 값 정보를 저장한다.
- 어휘 분석 결과를 저장한다.
정답: 3
해설: 인터프리터 구현에서 '환경'은 식별자의 값 정보를 저장하는 주된 역할을 한다.
문제 15
어휘 분석기가 사용하는 '유한 오토마타'의 주된 기능은 무엇인가?
- 구문 트리를 생성한다.
- 프로그램의 어휘를 구별하여 토큰을 생성한다.
- 프로그램의 실행 환경을 설정한다.
- 어휘 분석 결과를 저장한다.
정답: 2
해설: 유한 오토마타는 어휘 분석기에서 프로그램의 어휘를 구별하여 토큰을 생성하는 기능을 수행한다.
문제 16
'동적 세그먼트'의 주요 구성 요소는 무엇인가?
- 코드와 정적 데이터
- 스택과 힙
- 어휘 분석기와 구문 분석기
- 실행 환경과 프로시저
정답: 2
해설: 동적 세그먼트는 주로 스택과 힙으로 구성되어 있으며, 스택은 서브프로그램의 활성 레코드를 관리하고, 힙은 수동 할당 변수 공간으로 사용된다.
문제 17
컴파일러 구현에서 '심볼 테이블'의 주된 역할은 무엇인가?
- 프로그램의 실행 환경을 설정한다.
- 구문 트리의 구조를 정의한다.
- 식별자의 자료형 정보와 선언 위치를 저장한다.
- 어휘 분석 결과를 저장한다.
정답: 3
해설: 심볼 테이블은 컴파일러 구현에서 식별자의 자료형 정보와 선언 위치 등을 저장하는 역할을 한다.
문제 18
'절차형 언어'의 구현 특징은 무엇인가?
- 함수 및 프로시저를 연관시킨 자료형을 지원한다.
- 저급언어의 연산과 명령어를 확장한다.
- 람다 계산을 기반으로 한다.
- 사용자 정의 연산(함수)과 사용자 정의 명령어(프로시저)를 지원한다.
정답: 4
해설: 절차형 언어는 사용자 정의 연산(함수)과 사용자 정의 명령어(프로시저)를 지원하는 형태로 구현된다.
문제 19
'객체지향 언어'의 구현 특징은 무엇인가?
- 함수 및 프로시저를 연관시킨 자료형을 지원한다.
- 저급언어의 연산과 명령어를 확장한다.
- 람다 계산을 기반으로 한다.
- 연역 논리에 기반을 둔다.
정답: 1
해설: 객체지향 언어는 자료형에 함수 및 프로시저를 연관시키는 방식으로 사용자 정의 자료형을 지원하는 형태로 구현된다.
문제 20
컴파일러와 인터프리터의 가장 큰 차이점은 무엇인가?
- 컴파일러는 구문 트리를 생성하지만, 인터프리터는 생성하지 않는다.
- 컴파일러는 고수준 언어를 저수
준 언어로 번역하고, 인터프리터는 번역 없이 실행한다.
3. 인터프리터는 구문 트리를 생성하고, 컴파일러는 생성하지 않는다.
4. 인터프리터는 고수준 언어를 저수준 언어로 번역하고, 컴파일러는 번역 없이 실행한다.
정답: 2
해설: 컴파일러는 고수준 프로그램을 저수준 언어로 번역하여 실행하는 반면, 인터프리터는 번역 없이 고수준 언어를 직접 실행한다.
문제 21
'레지스터'의 역할은 컴파일러 구현에서 주로 무엇인가?
- 코드 세그먼트를 가리킨다.
- 스택을 가리키는 SP 및 FP를 포함한다.
- 전용 레지스터와 여러 범용 레지스터로 구성된다.
- 모든 위의 항목을 포함한다.
정답: 4
해설: 레지스터는 코드 세그먼트를 가리키는 PC, 스택을 가리키는 SP 및 FP를 포함하는 전용 레지스터와 여러 범용 레지스터로 구성된다.
문제 22
컴파일러 구현에서 '생성 단계'의 주요 목적은 무엇인가?
- 어휘를 분석한다.
- 구문을 분석한다.
- 구문 트리를 저수준 언어로 변환한다.
- 프로그램을 해석한다.
정답: 3
해설: 생성 단계는 컴파일러 구현에서 구문 트리를 저수준 언어로 변환하는 주요 목적을 가진다.
문제 23
'파스 트리'와 '추상 구문 트리'의 공통점은 무엇인가?
- 두 트리 모두 구문 분석 단계의 결과물이다.
- 두 트리 모두 모든 문법 정보를 포함한다.
- 두 트리 모두 프로그램의 실행 순서를 나타낸다.
- 두 트리 모두 의미 분석 단계의 결과물이다.
정답: 1
해설: 파스 트리와 추상 구문 트리는 모두 구문 분석 단계에서 생성되며, 프로그램의 구조를 나타내는 트리 형태의 표현이다.
문제 24
인터프리터 구현에서 '중간 표현'을 순회하는 단계의 목적은 무엇인가?
- 프로그램의 어휘를 구별한다.
- 프로그램을 저수준 언어로 변환한다.
- 프로그램의 문장 단위로 해석하여 실행한다.
- 구문 트리의 구조를 정의한다.
정답: 3
해설: 인터프리터 구현에서 중간 표현을 순회하는 단계는 프로그램의 문장 단위로 해석하여 실행하는 목적을 가진다.
프로그래밍 언어론 수업을 위한 추가적인 4지 선다형 문제를 다음과 같이 출제하였다.
문제 25
프로그래밍 언어의 '의미'란 무엇을 의미하는가?
- 프로그램의 구조와 형태
- 프로그램의 실행 결과와 동작 방식
- 프로그램의 데이터 타입과 변수
- 프로그램의 메모리 관리 방법
정답: 2
해설: 프로그래밍 언어의 '의미'는 프로그램이 실행될 때 어떻게 동작하는지, 실행 결과가 무엇인지에 관한 규정을 의미한다.
문제 26
'추상 기계'라는 용어의 다른 명칭은 무엇인가?
- 파스 트리
- 심볼 테이블
- 가상 기계
- 유한 오토마타
정답: 3
해설: '추상 기계'라는 용어는 '가상 기계'라는 용어로도 사용된다.
문제 27
컴파일러의 '분석 단계'에서 수행되는 주요 작업은 무엇인가?
- 프로그램의 어휘를 분석한다.
- 구문 트리를 생성한다.
- 의미 분석을 수행한다.
- 모두 포함한다.
정답: 4
해설: 컴파일러의 '분석 단계'에서는 프로그램의 어휘 분석, 구문 트리 생성, 의미 분석 등을 수행한다.
문제 28
'유한 오토마타'는 어떤 작업에 주로 사용되는가?
- 구문 트리 생성
- 어휘 분석
- 의미 분석
- 중간 코드 생성
정답: 2
해설: '유한 오토마타'는 주로 어휘 분석 과정에서 프로그램의 어휘를 구별하고 토큰을 생성하는 데 사용된다.
문제 29
심볼 테이블과 환경의 차이점은 무엇인가?
- 심볼 테이블은 식별자의 자료형 정보를 저장하고, 환경은 값 정보를 저장한다.
- 환경은 식별자의 자료형 정보를 저장하고, 심볼 테이블은 값 정보를 저장한다.
- 두 용어는 같은 의미를 가진다.
- 심볼 테이블은 어휘 분석에서 사용되고, 환경은 구문 분석에서 사용된다.
정답: 1
해설: 심볼 테이블은 컴파일러 구현에서 식별자의 자료형 정보, 선언 위치 등을 저장하는 반면, 환경은 인터프리터 구현에서 식별자의 값 정보를 저장한다.
문제 30
컴파일러의 '생성 단계'에서 주로 수행되는 작업은 무엇인가?
- 어휘 분석
- 구문 분석
- 의미 분석
- 저수준 언어로의 코드 변환
정답: 4
해설: 컴파일러의 '생성 단계'에서는 구문 트리를 저수준 언어로 변환하는 작업이 주로 수행된다.
'CS > 프로그래밍언어론' 카테고리의 다른 글
변수의 영역 , 정적 영역, 동적 영역, 지역 변수, 정적 영역 규칙 - 방통대 프로그래밍 언어론 기말 고사 기출 유사 문제 풀이 (1) | 2023.12.08 |
---|---|
프로그래밍 언어론 변수와 바인딩 기말고사 대비 문제 풀이 및 요약 정리 (1) | 2023.12.08 |
구문 분석, 파스 트리 용어 정리 및 예상 문제 풀이 - 방통대 프로그래밍 언어론 (1) | 2023.12.08 |
구문론과 의미론 용어 정리 및 연습 문제 풀이 - 프로그래밍 언어론 (1) | 2023.12.08 |
방송대 프로그래밍 언어론 기출문제 오답률 높은 문제들 정리 및 해설 (1) | 2023.12.08 |