프로그래밍 언어론 2005년 가을학기 창병모 숙명여대 컴퓨터과학과 담당교수 창 병 모, 숙명여대 컴퓨터과학, 서관 408A호 e-mail : chang@sookmyung.ac.kr www : http://cs.sookmyung.ac.kr/~chang phone: 710-9378 교재 및 참고문헌 교재 Kenneth C. Louden, Programming languages : Principles and Practice, 2nd Edition, Thomson 참고문헌 R. Sebesta, Concepts of Programming Languages, 5th Edition, Addison-Wesley, 2001 Lewis, and Loftus, Java Software Solutions, 2nd Edition, Addison-Wesley 1999 강의 목표 프로그래밍 언어의 이론 및 실제 이론 및 실제가 필요하다. 프로그래밍 언어 및 컴파일러 이론 언어 구현 기술 Java 프로그래밍 언어 강의 계획 1주 : 2주 : 3주 : 4주 : 5주 : 6주 : 7주 : 8주 : 서론 역사 및 설계원리 구문구조 의미구조 데이터 타입 타입 검사 식과 문장 중간시험 강의 계획 9주 : 10주 : 11주 : 12주 : 13주 : 14주 : 15주 : 프로시저 프로시저 구현 추상 데이터 타입 객체-지향 프로그래밍 I 객체-지향 프로그래밍 II 자바 가상 기계(JVM) 기말시험 1장 서론 프로그래밍 언어란 ? 프로그래밍 언어의 역할 프로그래밍 파라다임 프로그래밍 언어 정의 프로그래밍 언어 구현 1.1 프로그래밍 언어란 ? 프로그래밍 언어의 중요성 주요 프로그래밍 도구 컴퓨터과학은 프로그래밍 언어의 발전을 매개로 발전해 왔 다. 예 객체-지향 객체-지향 객체-지향 객체-지향 프로그래밍 언어 프로그래밍 데이터베이스 시스템 소프트웨어 공학 프로그래밍 언어의 중요성 언어의 구조가 사고의 범위를 지배한다 ? 언어에 따라 사고방식이 달라진다. 절차형(명령형) 언어(procedural language) 함수형 언어(functional language) 논리 언어(logic language) 객체-지향 언어(object-oriented language) 무엇을 공부할까? 프로그래밍 언어가 제공하는 기능들 동기 설계원리 사용법 프로그래밍 언어의 구현 구현 기술 왜 프로그래밍 언어를 배울까? 응용에 적절한 언어의 선택 새로운 언어를 쉽게 배울 수 있다. C++를 알고 있으면 Java는 쉽게 배울 수 있다. 새로운 언어 설계 능력 배양 모든 응용에 적합한 언어는 없다. 대부분의 소프트웨어 시스템은 언어를 통해서 사용자와 상 호작용한다. 컴퓨팅에 대한 전체적인 시각을 갖게 한다. 객체-지향 컴퓨팅, 인터넷 컴퓨팅 프로그래밍 언어란 무엇인가 ? A programming language is a notational system for describing computation in machine-readable and human-readable form 프로그래밍 언어란 무엇인가 ? 계산(Computation) 기계 읽기(Machine readability) 데이터 조작 텍스트 처리 정보 저장 및 검색 효율적인 번역 혹은 실행 사람 읽기(Human readability) 프로그래밍 편의성 컴퓨터 연산들의 이해하기 쉬운 추상화 혹은 요약 1.2 프로그래밍 언어의 역할 Von Neuman 모델 컴퓨터 특징 stored program (instructions and data) computer a single CPU sequentially execute instructions in memory that operate on values stored in memory Programming languages began by imitating and abstracting the operations of a von Neuman model computer Von Neuman Model Computer Memory 프로그램 (Instruction + Data) Instruction + Data Results of operation PC CPU R0, R1, R2, …, R9 Instructions and data 명령어(Instructions) 100 : halt 2dn : set register d to n 3dn : add n to register d 4dn : multiply register d by n 5ds : set register d to the value of register s 6ds : add the value of register s to register d 7ds : multiply register d by the value of register s 8da : set register d to the value in RAM whose address is in register a 9sa : set the value in RAM whose address is in register a to that of register s 0ds : goto the location in register d unless register s contains 0 데이터 추상화(Data Abstraction) 기본 추상화 변수(variable) 데이터 값을 저장하는 메모리 위치 데이터 타입(data type) 기본 데이터 관련 요약 값들의 종류에 대한 이름 예: int, float, double, … 선언(declaration) 변수의 이름과 데이터 타입을 선언한다. int x; double y; 데이터 추상화 구조적 추상화 관련된 데이터 값들의 모음을 요약 예 레코드(구조체): 다른 타입의 값들의 모음 배열: 같은 타입의 값들의 모음 제어 추상화(Control Abstraction) 기본 추상화 몇 개의 기계어 명령어들을 하나의 문장으로 요약 배정문 x = x+3 goto 문 jump 명령어의 요약 READ X ADD X, 3, TMP STORE TMP, X 제어 추상화 구조적 제어 추상화 테스트 내의 중첩된 기계어 명령어들을 하나의 문장으로 요 약 예 if-문 switch-문 C for, while, … 제어 추상화 예 while (condition) { statements } L1: if (~condition) GOTO L2 code for statements GOTO L1 L2 : ... 장점 기계에 대한 추상화(요약된) 관점 다른 제어 문장들과 중첩되어 사용될 수 있다. 제어 추상화 프로시저(함수, 메쏘드) 선언 일련의 계산 과정을 하나의 이름으로 요약해서 정의 호출 이름과 실 매개변수를 이용하여 호출 통합 추상화(Unit Abstraction) 추상 데이터 타입 (데이터 + 연산) 데이터와 관련된 연산들을 통합하여 요약 예 Modula-2의 모듈 Ada의 패키지 C++, Java 등의 클래스 1.3 프로그래밍 파라다임 명령형 언어(Imperative language) Imperative programming languages began by imitating and abstracting the operations of a von Neuman model computer 특징 순차적 명령어 실행 메모리 위치를 나타내는 변수 사용 배정문을 사용한 변수 값 변경 단점 언어 필요가 아니고 기계 모델에 기반한 언어 예제(in C) int gcd(int u, int v) { if (v== 0) { return u; } else { return gcd(v, u mod v); } } 다른 계산 모델들 다른 계산 모델은 무엇인가 ? 함수형 언어(functional language) 논리 언어(logic language) 객체-지향 언어(object-oriented language) 함수형 언어(Functional language) 기본 모델 수학 함수에 기반 함수를 값에 적용(application) 매개변수 전달(parameter passing) 반환 값(return value) 특징 변수 및 배정문이 없음 자기호출(recursion)에 의한 반복 루프 같은 반복문은 없음 함수형 언어(Functional language) 예제 (define (gcd u v) (if (= v 0) u (gcd v (remainder u v)))) 장점 기계 모델과 무관 수학을 기반으로 하기 때문에 프로그램의 의미를 명확하게 정의할 수 있다. 논리 언어 (Logic language) 기본 모델 기호 논리를 기반으로 함 선언적 언어 프로그램 문제를 해결하는 방법보다 문제가 무엇인지를 기술하는 논리 문장들의 집합 예제 gcd(U,V,U) :- V = 0. gcd(U,V,X) :- V > 0, Y is U mod V, gcd(V,Y,X). 논리 언어 (Logic language) 특징 루프나 선택문 등가 같은 제어 추상화가 없다. 제어는 하부 시스템(해석기)에 의해 제공된다. 변수는 메모리 위치가 아니라 부분 결과 값에 대한 이름이다. 장점 기계-독립적이고 정확한 의미구조를 가지고 있다. 선언적 프로그래밍이 가능하다. 객체지향 언어 (Object-oriented language) 기본 모델 객체(object) 계산과정(computation) 데이터와 관련 연산들의 모음 객체들 사이의 상호작용 클래스(class) 객체에 대한 타입 정의 객체는 클래스의 한 실체(instance)이다. 1.4 프로그래밍 언어 정의 정형적 정의 구문구조(Syntax) 문장을 구성하는 법 의미구조(Semantics) 각 문장의 정확한 의미 프로그램의 의미 구문(syntax) 구문 구조 문법 혹은 BNF <if-statement> ::= if < condition> then<statement> [else <statement>] 의미구조 (semantics) 문장의 의미, 프로그램의 의미 정형적 정의/비정형적 정의 if-문의 의미 정형적 정의 방법 denotational semantics operational semantics axiomatic semantics 1.5 프로그래밍 언어 구현 인터프리터 (Interpreter) source code input interpreter output 컴파일러 역할 source program preprocessor source program compiler target assembly program assembler relocatable machine code loader/link-editor absolute machine code 컴파일러 구조 Source program Analysis phases Synthesis phases Target program 컴파일러 구조 Source program Lexical analysis Syntax Analysis Semantic Analysis Parse tree Abstract syntax tree Int Code Gen Global Optimizer Target Code Gen Target program JAVA 실행 모델 JAVA program compiler Bytecode Byte code Interpreter