방송대 프로그래밍언어론 6강: 언어 구현과 컴파일러·인터프리터
문법책에 적힌 언어가 어떻게 CPU에서 움직이는 프로그램이 되는가? 언어 정의, 분석기, 중간 표현, 컴파일러 후단부 또는 인터프리터 엔진, 실행 환경을 하나의 구현 지도로 연결하면 컴파일과 해석의 공통점·차이, 각 자료구조의 역할, 문법이 코드로 바뀌는 원리를 함께 설명할 수 있다.
소스 프로그램과 실행 결과 사이에는 다섯 층이 놓인다
다음 한 줄은 사람이 보기에는 간단하지만 CPU가 바로 이해하는 형태는 아니다.
total = 7 + 8
이 문장을 실행하려면 먼저 언어가 허용하는 문장 형태와 수행 의미가 정해져 있어야 한다. 구현 프로그램은 문자를 토큰으로 나누고, 토큰을 구문 구조로 묶고, 필요한 의미 정보를 붙여 중간 표현을 만든다. 이후 컴파일러라면 목적 코드를 만들고 CPU가 이를 수행하며, 인터프리터라면 엔진이 중간 표현을 순회하며 곧바로 수행한다.
| 구현 층 | 받는 것 | 내보내거나 수행하는 것 | 핵심 질문 |
|---|---|---|---|
| 언어 정의 | 언어 설계 의도 | 구문규칙·의미규칙 | 어떤 프로그램이 옳고 어떻게 실행되어야 하는가? |
| 분석 전단부 | 원시 프로그램 | 토큰·구문트리·중간 표현 | 소스의 구조와 의미 제약은 무엇인가? |
| 컴파일러 후단부 | 중간 표현 | 목적기계용 프로그램 | 어떤 명령어로 효율적으로 바꿀 것인가? |
| 인터프리터 엔진 | 중간 표현과 입력 | 실행 결과 | 구조를 순회하며 어떤 동작을 할 것인가? |
| 실행 환경 | 실행 중 코드·데이터 | 메모리·레지스터 상태 | 값과 호출 상태를 어디에 보관할 것인가? |
전체 지도: 정의는 규칙을 제공하고, 전단부는 구조를 파악하며, 후단부 또는 엔진은 수행 가능한 동작으로 연결하고, 실행 환경은 실제 수행 상태를 유지한다.
언어 정의는 구문규칙과 의미규칙의 결합이다
구문규칙은 어떤 프로그램이 올바른 형태인지 규정한다. 문맥 자유 문법, BNF, EBNF, 구문도표 등이 이를 표현하며 실제 언어 정의에는 문맥 자유 문법과 EBNF가 주로 쓰인다. 의미규칙은 올바른 형태의 프로그램을 실행했을 때 어떤 동작이 옳은지 규정한다. 기능적·표기적·공리적 의미론 같은 형식적 방법도 있지만 실제 정의에서는 자연어 설명도 많이 사용한다.
강의의 로봇 제어 언어는 두 규칙의 역할을 선명하게 보여 준다.
<program> ::= { forward | left | right } ;
이 구문규칙은 세 명령이 0회 이상 이어지는 형태를 허용한다. 그러나 이것만으로는 로봇이 움직이지 않는다. forward는 현재 방향으로 단위 길이만큼 이동하고, left와 right는 각각 90도 좌회전·우회전한다는 의미규칙이 있어야 한다.
예를 들어 초기 위치를 (0,0), 방향을 북쪽으로 가정하고 forward right forward를 수행하면 첫 명령 후 (0,1), 우회전 후 동쪽, 마지막 명령 후 (1,1)이 된다. 이 계산은 강의의 의미규칙을 새로운 초기 상태에 적용한 학습용 예다.
형태와 동작을 섞지 않는다: 구문규칙은 명령열이 허용되는지 판정하지만 위치 변화까지 말하지 않는다. 의미규칙은 이미 올바른 형태라고 판정된 명령이 상태를 어떻게 바꾸는지 설명한다.
구현은 언어 규칙을 실제로 수행하는 프로그램이다
프로그래밍 언어 L의 구현은 L로 작성된 프로그램을 수행하는 프로그램이다. 먼저 프로그램 PL이 L의 구문규칙을 따르는지 검사하고, 올바르면 입력 in을 받아 의미규칙에 따라 결과 out을 만든다.
강의는 이 관계를 함수 모형으로 표현한다.
CPU: M⟦P_M⟧(in) = out
언어 L의 구현: L⟦P_L⟧(in) = out
인터프리터: Int_L⟦P_L⟧(in) = out
컴파일러: Comp_L⟦P_L⟧ = P_M
컴파일 후 실행: M⟦P_M⟧(in) = out
M은 CPU가 받아들이는 기계어이고 PM은 그 기계어로 작성된 프로그램이다. 인터프리터 IntL은 소스 프로그램을 해석하며 CPU와 비슷한 수행 기능을 맡는다. 컴파일러 CompL은 소스 프로그램을 목적 프로그램으로 변환하고, 실제 입력을 처리해 출력을 만드는 일은 변환된 프로그램과 CPU가 담당한다.
함수 모형 읽기: 컴파일러의 직접 출력은 실행 결과가 아니라 프로그램 PM이다. 인터프리터는 프로그램과 실행 입력을 함께 받아 결과를 낸다.
구현 전략은 하드웨어와 계산 모델의 거리를 줄이는 방식이다
전통적인 명령형 계열 언어는 기계어가 제공하는 연산과 명령을 확장하는 방향으로 구현한다. 반면 함수형 언어와 논리 언어는 언어의 계산 모델이 기계어와 직접 대응하기 어렵기 때문에 계산 모델과 하드웨어 사이에 추상기계를 놓는다.
| 언어 범주 | 기반에서 추가되는 것 | 구현 관점 |
|---|---|---|
| 명령형 언어 | 저급언어의 연산과 명령어 확장 | 기계의 상태 변경 명령을 넓힌다. |
| 절차형 언어 | 명령형 언어 + 함수·프로시저 | 사용자 정의 연산과 명령을 지원한다. |
| 객체지향 언어 | 절차형 언어 + 사용자 정의 데이터 타입 | 데이터와 연산을 표현하는 범위를 넓힌다. |
| 함수형 언어 | 람다 계산법 기반의 계산 모델 | 계산 모델을 반영한 추상기계를 징검다리로 둔다. |
| 논리 언어 | 연역 논리 기반의 계산 모델 | 논리 추론을 수행할 추상기계를 거친다. |
추상기계는 언어의 계산 모델을 하드웨어에 연결하기 위한 중간 구현 모델이다. 강의에서는 함수형 언어의 CPS, G-machine, SGM, STGM, TIM과 논리 언어의 WAM을 예로 든다. 추상기계가 구체적인 구현물로 제시되어 코드를 독자적으로 수행할 수 있으면 가상기계라고 한다.
따라서 “새 패러다임의 언어는 컴파일할 수 없다”는 결론은 틀리다. 핵심은 직접적인 기계어 확장만으로 설명하기 어렵기 때문에 중간 계산 모델을 명시한다는 데 있다.
컴파일러와 인터프리터는 분석 전단부를 공유한다
컴파일러의 구현은 크게 분석 단계(전단부)와 생성 단계(후단부)로 나뉜다. 전단부는 어휘 분석, 구문 분석, 의미 분석을 거쳐 원시 프로그램의 구조를 파악하고 중간 표현을 만든다. 이 부분은 소스 프로그래밍 언어에 종속적이다. 후단부는 중간 코드를 최적화하고 목적기계에 맞는 명령어를 생성·최적화하므로 목적기계에 종속적이다.
인터프리터도 전단부를 생략하지 않는다. 같은 분석을 거쳐 얻은 중간 표현을 목적 코드로 저장하는 대신, 인터프리터 엔진이 순회하며 문장 단위로 수행한다.
| 비교축 | 컴파일러 | 인터프리터 |
|---|---|---|
| 공통 입력 처리 | 어휘·구문·의미 분석 | 어휘·구문·의미 분석 |
| 공통 산출물 | 중간 표현 | 중간 표현 |
| 중간 표현 이후 | 최적화·코드 생성으로 목적 프로그램 생성 | 인터프리터 엔진이 순회하며 수행 |
| 직접 결과 | 목적기계가 수행할 프로그램 | 주어진 입력에 대한 실행 출력 |
| 종속성의 중심 | 전단부는 언어, 후단부는 목적기계 | 분석기는 언어, 엔진은 언어의 수행 의미 |
대표 오개념: 인터프리터가 한 줄씩 실행한다고 해서 문법 검사가 없는 것은 아니다. 실행 전에 또는 실행 과정에서 분석 단계를 거쳐 구조를 파악해야 중간 표현을 올바르게 순회할 수 있다.
구문트리·심볼 테이블·환경은 서로 다른 정보를 보존한다
언어 구현의 자료구조는 같은 정보를 중복 저장하는 목록이 아니다. 구문트리는 프로그램의 구조를, 심볼 테이블은 선언된 이름의 정적 정보를, 환경은 실행 중 이름과 값의 관계까지 보존한다.
| 자료구조 | 주요 내용 | 대표 사용 지점 | 답하는 질문 |
|---|---|---|---|
| 구문트리 | 연산·문장·하위 구조 | 분석 전 과정과 번역 | 프로그램이 어떤 구조인가? |
| 심볼 테이블 | 식별자의 타입·선언 위치 등 | 컴파일러 분석 | 이 이름은 어디서 어떤 형식으로 선언되었는가? |
| 환경 | 식별자의 정적 정보와 값 | 인터프리터 수행 | 이 이름이 현재 어떤 값에 연결되는가? |
| 실행 환경 | 코드·데이터·스택·힙·레지스터 | 실제 프로그램 실행 | 호출과 객체, 다음 명령의 상태를 어디에 둘 것인가? |
실행 환경은 언어 구현 프로그램을 만드는 동안의 분석 자료구조와 구별된다. 프로그램이 실행될 때 정적 세그먼트에는 코드와 정적 데이터가, 동적 세그먼트에는 스택과 힙이 놓인다. PC·SP·FP 같은 전용 레지스터는 다음 명령과 스택·프레임 상태를 관리하고, 범용 레지스터는 여러 계산 목적에 사용된다.
선택 질문: 구조가 필요하면 구문트리, 선언 속성이 필요하면 심볼 테이블, 현재 값까지 필요하면 환경, 실제 호출·메모리 상태가 필요하면 실행 환경을 본다.
어휘 분석기는 상태 이동으로 렉심의 끝을 찾는다
어휘 분석기는 예약어, 식별자, 리터럴, 연산자 같은 어휘를 구별하고 필요하면 속성을 함께 구문 분석기에 전달한다. 대부분 유한상태기계(FSM)를 구성해 구현한다. 현재 상태와 다음 문자에 따라 상태를 옮기다가 더는 해당 토큰에 속하지 않는 문자를 만나면 토큰을 확정한다.
강의의 상태기계를 따라 두 입력을 비교하면 +의 역할이 문맥에 따라 달라짐을 확인할 수 있다.
x=2+34 → ID(x), OP_ASSIGN, LIT_INT(2), OP_PLUS, LIT_INT(34)
x=2e+34 → ID(x), OP_ASSIGN, LIT_DBL(2e+34)
첫 입력에서 숫자 2 다음의 +는 정수 렉심을 끝내고 독립적인 덧셈 연산자 토큰이 된다. 둘째 입력에서는 2e를 읽은 상태에서 +가 지수부 부호로 이어지고, 뒤 숫자까지 포함한 실수 리터럴을 완성한다. 문자의 모양만 보고 토큰을 결정하는 것이 아니라 어떤 상태에서 그 문자를 만났는지가 중요하다.
경계 사례: x=2e+는 지수부 숫자가 없어 강의의 실수 리터럴 최종 상태에 도달하지 못한다. +를 무조건 연산자로 되돌려 처리하면 이미 읽은 e와의 관계가 깨지므로, 구현은 실패 상태와 입력 되돌림 정책을 명확히 정해야 한다.
파스 트리를 AST로 줄이면 번역에 필요한 뼈대가 남는다
구문 분석기는 어휘 분석 결과인 토큰열에서 구문트리를 구성한다. 파스 트리는 생성규칙에 등장하는 문법 기호 정보를 모두 포함하지만, 추상 구문 트리(AST)는 번역에 필요한 핵심 구조만 남긴다.
강의의 식 1+5*2는 AST에서 다음처럼 압축된다.
+
/ \
1 *
/ \
5 2
루트 +의 왼쪽 피연산자는 1이고, 오른쪽 피연산자는 5*2다. <exp>, <digit> 같은 문법 유도용 노드는 사라지지만 우선순위와 피연산자 관계는 보존된다. 전단부는 이 구조를 이용해 의미를 검사하고 중간 표현을 만들며, 후단부나 인터프리터 엔진은 이를 순회해 번역하거나 실행한다.
직접 구성한 total=7+8도 같은 방식으로 대입 노드를 루트에 두고 왼쪽에 식별자 total, 오른쪽에 덧셈 노드와 두 리터럴을 둔다. 이 구조에 심볼 테이블의 total 타입 정보가 연결되면 대입 가능 여부까지 검사할 수 있다.
순환 하강 분석기는 비단말기호를 프로시저로 번역한다
순환 하강 구문 분석기는 문법규칙을 코드 구조로 직접 옮긴다. 각 비단말기호마다 프로시저 하나를 만들고, 규칙 우변의 단말기호는 현재 입력과 일치하는지 검사하며, 비단말기호는 해당 프로시저 호출로 바꾼다.
강의의 괄호 문자열 문법은 다음과 같다. ε은 빈 문자열을 뜻한다.
<L> ::= <S> newline <L> | EOF ;
<S> ::= '(' <S> ')' <S> | ε ;
핵심 프로시저를 학습용으로 정리하면 문법 우변과 호출 순서가 그대로 대응한다.
void S(void) {
if (LA == '(') {
match('(');
S();
match(')');
S();
}
/* 그 밖의 경우는 epsilon */
}
입력 (())을 추적하면 첫 S가 (를 소비하고 둘째 S를 부른다. 둘째가 다시 (를 소비하고 셋째 S는 다음 문자가 )이므로 ε을 선택한다. 둘째 호출이 )를 맞춘 뒤 후속 S도 ε, 첫 호출로 돌아와 마지막 )를 맞추고 후속 S가 ε을 선택하면 성공한다.
반면 (()은 내부 쌍을 처리한 뒤 바깥쪽 match(')')에서 입력이 끝나 오류가 난다. S의 else가 ε이라고 해서 어떤 문자열이나 받아들이는 것은 아니다. 호출한 쪽의 match, 줄바꿈, EOF 조건이 남은 입력을 검사한다.
구현 요소는 산출물과 소비자를 따라 연결하면 헷갈리지 않는다
새로운 구현 문제에서는 용어를 따로 외우기보다 각 단계가 무엇을 만들고 다음 누가 그것을 사용하는지 추적한다.
- 정의 확인: 구문규칙으로 허용 형태를, 의미규칙으로 수행 동작을 정한다.
- 전단부 연결: 어휘 분석기가 토큰을, 구문 분석기가 트리를, 의미 분석이 붙은 전단부가 중간 표현을 만든다.
- 이름 정보 연결: 컴파일 시 선언 정보는 심볼 테이블에서, 해석 중 값 정보는 환경에서 찾는다.
- 수행 경로 선택: 컴파일러 후단부는 목적 프로그램을 만들고, 인터프리터 엔진은 중간 표현을 순회한다.
- 실행 상태 확인: 어느 경로든 실제 수행에는 메모리 구조와 레지스터가 필요하다.
오류 위치도 이 연결로 진단할 수 있다. 2e+가 하나의 수로 끝나지 못하면 어휘 분석 문제이고, 괄호 짝이 맞지 않으면 구문 분석 문제다. 선언되지 않은 이름이나 타입 불일치는 의미 분석과 심볼 정보의 문제다. 올바른 중간 표현을 특정 CPU 명령으로 바꾸지 못하면 후단부 문제이고, 실행 중 호출 스택이나 힙 관리가 깨지면 실행 환경 문제다.
진단법: 증상만 보지 말고 ‘직전 단계가 내놓아야 할 산출물’과 ‘현재 단계가 기대하는 입력’이 일치하는지 확인한다.
핵심 개념 정리
- 언어 정의는 올바른 형태를 정하는 구문규칙과 올바른 수행을 정하는 의미규칙으로 이루어진다.
- 인터프리터는 소스 프로그램을 해석해 결과를 만들고, 컴파일러는 목적 프로그램을 만든 뒤 CPU가 이를 실행한다.
- 컴파일러와 인터프리터는 어휘·구문·의미 분석과 중간 표현 생성이라는 전단부를 공유한다.
- 구문트리는 구조, 심볼 테이블은 선언 속성, 환경은 현재 값, 실행 환경은 메모리·레지스터 상태를 담당한다.
- 어휘 분석기는 FSM의 상태 이동으로 토큰을 구별하고, 순환 하강 분석기는 비단말기호와 우변을 프로시저와 호출로 대응시킨다.
언어 구현을 설명할 때는 정의에서 실행으로 내려가며 산출물을 잇는다. 구문·의미규칙이 분석기의 기준이 되고, 토큰은 트리로, 트리는 중간 표현으로 바뀐다. 그다음 목적 프로그램을 생성할지 중간 표현을 직접 순회할지 갈라지지만, 마지막에는 실행 환경이 상태를 유지한다. 어떤 구성요소를 묻는 문제든 ‘무엇을 입력받고 무엇을 내보내며 누가 다음에 소비하는가’를 확인하면 위치와 역할을 판단할 수 있다.
예상문제 10선
1. 프로그래밍 언어 정의를 구성하는 두 규칙의 역할을 옳게 짝지은 것은?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ②
- ① 오답: 실행 속도와 코드 길이는 구현 품질과 관련되며 언어 정의의 두 규칙을 구분하는 기준이 아니다.
- ② 정답: 프로그램을 받아들일 형태와 받아들인 프로그램의 동작을 각각 규정한다.
- ③ 오답: 값 저장은 실행 환경, 토큰 경계는 어휘 분석기의 관심사다.
- ④ 오답: 목적기계와 소스 언어의 종속성은 컴파일러 단계 구분에 해당한다.
2. 북쪽을 향한 로봇이 forward right forward를 수행할 때 마지막 동작을 결정하는 규칙은?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ④
- ① 오답: 구문규칙은 명령열이 허용되는지 판정하지만 위치와 방향 변화는 계산하지 않는다.
- ② 오답: 로봇 명령의 동작은 식별자 선언 정보로 결정되지 않는다.
- ③ 오답: 목적 코드 생성 방식과 언어 명령의 정의된 효과를 혼동했다.
- ④ 정답: forward의 이동과 right의 90도 우회전이라는 상태 변화가 수행 결과를 정한다.
3. 컴파일러 함수 모형의 직접 결과를 옳게 설명한 것은?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ①
- ① 정답: CompL⟦PL⟧=PM에서 변환 산출물은 저수준 프로그램이다.
- ② 오답: 실행 출력은 생성된 목적 프로그램을 CPU가 입력과 함께 수행한 뒤 나온다.
- ③ 오답: 환경의 값은 인터프리터 수행 상태이지 컴파일러의 직접 산출물이 아니다.
- ④ 오답: 토큰은 전단부 중 어휘 분석의 중간 산출물이다.
4. 전통적 구현과 새로운 패러다임 언어 구현의 차이를 가장 잘 설명한 것은?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ③
- ① 오답: 어떤 방식이든 프로그램 구조를 파악하려면 분석 과정이 필요하다.
- ② 오답: 실제 프로그램 수행에는 메모리와 레지스터를 포함한 실행 환경이 필요하다.
- ③ 정답: 하드웨어와 언어의 계산 모델 사이 거리를 줄이는 방법의 차이를 나타낸다.
- ④ 오답: 추상기계도 언어의 정의된 계산 의미를 구현하기 위한 수단이다.
5. 컴파일러에서 원시 프로그램이 목적 프로그램으로 바뀌는 순서로 옳은 것은?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ④
- ① 오답: 코드 생성은 소스 구조를 분석해 중간 표현을 만든 뒤 수행한다.
- ② 오답: 실행 환경은 분석 산출물의 순서가 아니며 토큰이 의미 분석보다 먼저 생성된다.
- ③ 오답: 구문 분석은 어휘 분석의 토큰열을 입력으로 받고 목적 코드는 후단부에서 나온다.
- ④ 정답: 전단부가 구조와 의미를 파악해 중간 표현을 만든 뒤 후단부가 목적 코드를 생성한다.
6. “인터프리터는 문장을 바로 실행하므로 분석 전단부가 필요 없다”는 주장에 대한 교정으로 옳은 것은?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ②
- ① 오답: 목적 프로그램을 만드는 경로는 컴파일러 후단부의 특징이다.
- ② 정답: 두 구현 형태는 구조 파악까지 공유하고 중간 표현 이후 처리에서 갈라진다.
- ③ 오답: 레지스터는 실행 상태를 관리하며 잘못된 구문을 수정하지 않는다.
- ④ 오답: 강의의 인터프리터는 언어 L로 작성된 프로그램을 해석한다.
7. 인터프리터가 변수 score의 선언 타입뿐 아니라 현재 값도 찾아야 할 때 가장 알맞은 자료구조는?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ③
- ① 오답: 파스 트리는 문법 기호와 프로그램 구조를 나타내지만 현재 변수값을 중심으로 저장하지 않는다.
- ② 오답: 후단부는 목적기계 명령 생성 단계이지 식별자 값을 찾는 테이블이 아니다.
- ③ 정답: 환경은 심볼 테이블의 정적 정보에서 확장되어 실행 중 식별자의 값까지 연결한다.
- ④ 오답: FSM은 문자 흐름에서 토큰 경계를 판정한다.
8. 강의의 어휘 상태기계에서 x=2e+34를 분석한 결과로 옳은 것은?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ①
- ① 정답: 2e+34는 지수부 부호와 숫자까지 이어져 하나의 실수 리터럴 최종 상태에 도달한다.
- ② 오답: 이는 x=2+34처럼 e가 없을 때의 토큰열이다.
- ③ 오답: 대입 기호를 누락했고 지수부의 +를 독립 연산자로 잘못 분리했다.
- ④ 오답: 첫 렉심 x와 숫자 렉심의 토큰 범주·순서를 모두 뒤바꾸었다.
9. 파스 트리와 AST의 차이를 옳게 설명한 것은?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ④
- ① 오답: 두 트리의 정보량과 역할을 반대로 설명했다.
- ② 오답: 두 대상은 모두 구문 구조 표현이며 메모리 상태나 식별자 테이블 자체가 아니다.
- ③ 오답: 차이는 기계 종속성보다 문법 세부정보를 얼마나 보존하는지에 있다.
- ④ 정답: AST는 유도용 중간 노드를 덜어 내면서 연산자와 피연산자 관계를 보존한다.
10. 입력 (()을 괄호 문법의 순환 하강 분석기에 넣었을 때 실패 원인과 위치를 옳게 판단한 것은?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ②
- ① 오답: 예제 분석기는 괄호 문자를 단말기호로 직접 맞추며 식별자 규칙을 적용하지 않는다.
- ② 정답: 내부 괄호쌍을 처리한 뒤 바깥 호출이 요구하는 닫는 괄호를 입력 끝에서 찾지 못한다.
- ③ 오답: S가 빈 문자열을 선택해도 호출한 쪽의 닫는 괄호와 L의 줄바꿈·EOF 검사는 남는다.
- ④ 오답: 이 예는 문법을 프로시저로 옮긴 분석 과정이며 AST 축약이 실패 원인이 아니다.
참고 자료와 작성 기준
이 글은 해당 차시 강의자료를 바탕으로 학습 목적에 맞게 재구성한 비공식 학습자료입니다. 구현 관계, 상태 추적, 코드 예제와 문제 해설은 학습자의 이해를 돕도록 구성하고 검토했습니다.
- 작성·편집: 올에이클래스 학습연구팀
- 주요 근거: 한국방송통신대학교 컴퓨터과학과 프로그래밍언어론 제6강 「프로그래밍 언어의 구현」 강의자료(2025)
- 보충 자료: 별도의 외부 자료를 사용하지 않음
- 편집 원칙: 올에이클래스 편집 정책
- 최종 내용 검토: 2026-08-29
댓글
댓글 쓰기