프로그래밍 언어론

Download Report

Transcript 프로그래밍 언어론

프로그래밍 언어론
2004년 가을학기
창병모
숙명여대 컴퓨터과학과
담당교수




창 병 모, 숙명여대 컴퓨터과학, 서관 408A호
e-mail : [email protected]
www : http://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주 :
서론
History and Design Principles
Syntax and Semantics
Basic semantics
Data types
Expressions and Statements
Procedures and Environments
중간시험
강의 계획







9주 :
10주 :
11주 :
12주 :
13주 :
14주 :
15주 :
Procedure Implementation
Java Virtual Machine
Abstract Data Types
Object-oriented Programming I
Object-oriented Programming II
Exception Handling
기말시험
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 프로그래밍 언어의 역할

추상화(Abstraction)
데이터 추상화(Data Abstraction)

기본 추상화

변수(variable)


데이터 타입(data type)



데이터 값을 저장하는 메모리 위치
값들의 종류에 대한 이름
예: int, float, double, …
선언(declaration)


변수의 이름과 데이터 타입을 선언한다.
int x; double y;
데이터 추상화

구조적 추상화


관련된 데이터 값들의 모음을 요약
예


레코드(구조체): 다른 타입의 값들의 모음
배열: 같은 타입의 값들의 모음
제어 추상화(Control Abstraction)

기본 추상화

몇 개의 기계어 명령어들을 하나의 문장으로 요약

배정문


x = x+3
goto 문

jump 명령어의 요약
READ XADD 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
Von Neuman model


stored program (instructions and data)
computer
a single CPU sequentially execute instructions
in memory that operate on values stored in
memory
Von Neuman Model Computer
Memory
Instruction
+
Data
Results of operation
CPU
Instructions and data
명령형(절차형) 언어

특징




순차적 명령어 실행
메모리 위치를 나타내는 변수 사용
배정문을 사용한 변수 값 변경
단점


언어 필요가 아니고
기계 모델에 기반한 언어
다른 계산 모델들

다른 계산 모델은 무엇인가 ?



함수형 언어(functional language)
논리 언어(logic language)
객체-지향 언어(object-oriented language)
예제(in C)
int gcd(int u, int v)
{
if (v== 0) {
return u;
}
else {
return gcd(v, u mod v);
}
}
함수형 언어
(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