Programming Languages

Download Report

Transcript Programming Languages

Programming Languages
제1장
프로그래밍 언어 소개
 프로그래밍 언어란?
 컴퓨터와 의사소통을 하기 위한 표현법
 Hard-Wired(1940년 이전), Assembly(40년 이후, 폰 노이만)
정의 P.L은 기계가 읽을 수 있고 사람이 읽을 수 있는 형식으로 계산을
기술하는 표현체계
 P.L 배워야 한다. Why?





현재 사용하고 있는 언어의 이해 증진
유용한 프로그래밍을 구사할 수 있는 능력의 증대
언어 선택의 능력 증대
새로운 언어의 학습
새로운 언어의 설계 용이
프로그래밍 언어 소개
사람이 프로그램을 읽고 작성하기 용이하도록
 프로그래밍 언어에서의 추상화(Abstraction)
추상화 개념 자신의 속성들의 일부분만을 가지고 주어진 작업이나
객체들을 필요한 정도로 묘사할 수 있는 방법을 지원하는 것
 자료 추상화(Data Abstraction) 계산의 주체가 되는 자료를 추상화함
 string, number, tree, etc.
 제어추상화(Algorithm Abstraction)
실행 순서의 수정을 위한 제어의 특성을 추상화함
 Loop statements, Condition statements, Procedure call, etc.
 정보의 양으로 나눈 추상화 분류
 기본적 추상화(Basic Abstraction)
 기계 정보의 수집
 구조화된 추상화(Structured Abstraction)
 프로그램 구조에 대한 전역적 정보 수집
 기본적 단위 추상화(Unit Abstraction)
 단위 프로그램 전체에 대한 정보 수집
프로그래밍 언어 소개
자료 추상화(Data Abstraction)
 기본적 추상화(Basic Abstraction)
 컴퓨터 내부의 자료 표현을 추상화
 기억장치  변수, 2진수의 내부 표현 값  정수/실수 자료형
 구조화된 추상화(Structured Abstraction)
 서로 다른 형태의 자료들에 대한 집합을 추상화하는 방법
 Record/Array
 e.q) type person = record
name : string;
age : years;
address : string;
telnumber : string;
salary : integer;
end
var
X, Y : array[0..20] of real;
employee : person;
 단위 추상화(Unit Abstraction)
 large 프로그램에서 자료의 생성과 사용에 대한 정보를 한 곳에 두고,
자료의 접근을 제한하는 경우의 추상화
 Encapsulation : Modula-2의 module, Ada의 package, JAVA의 class
프로그래밍 언어 소개
제어 추상화(Algorithm Abstraction)
 기본적 추상화(Basic Abstraction)
 몇 개의 기계 명령어를 모아 이해하기 쉬운 추상 구문으로 만드는 것
 Fortran, Pascal, C의 GOTO문
 배정문 : x = x + y;
 의미 :
LDA
x,
ADD
y,
STA
x
 구조화된 추상화(Structured Abstraction)
 프로그램에서 어떤 검사된 값에 따라 분할된 명령어의 한 그룹을 수행
 If / case / switch / iteration
 강력한 구조화된 제어  부프로그램 (Procedure Abstraction)
 단위 추상화(Unit Abstraction)
 Procedure 집합의 추상화
 Modula-2의 module, Ada의 package, 라이브러리 함수
 그 외의 제어 추상화
 병행 프로그래밍
 동기화(synchronization)와 통신(communication)
프로그래밍 언어 소개
계산 전형
 PL은 폰 노이만 기계구조에 기초하여 설계됨.
 명령형 언어(imperative language; 절차적 언어)
 폰 노이만 기계구조에 기초하여 설계된 언어




컴퓨터의 계산 방식을 모방하여 설계
명령의 순차적 실행, 기억장소를 표시하는 변수의 사용
값의 변경을 위한 배정문의 사용
단점 : 폰 노이만 구조의 병목현상 초래, 비결정적 계산이나 순서에 의존하지 않는 계
산의 표현에는 부적절하며 비효율적
 적용형 언어(applicative language)
 함수형 언어(함수호출 기반) : Modula-2, LISP
 알려진 값들을 함수에 적용(함수의 평가 및 호출 방법 제공)
예제
 논리형 언어(선언적 언어) : Prolog
 기호 논리학에 근거, 계산 순서를 기술하지 않고 계산의 내용만 기술
 객체지향 언어 : Simular 67, C++, JAVA
 기억장치 기억장소와 이 기억장소의 값을 변경할 수 있는 연산의 집합
예제
예제
프로그래밍 언어 소개
CFG ?
언어 정의
G ( V, T, S, P)
 형식적인 언어의 정의
A  x ( A ∈ V, x ∈ ( V ∪ T)*
 언어에 대한 정확한 형식 기술 방법이 필요
 프로그래밍 과정에서 프로그램 동작의 이해를 위해 필요
 구문론(Syntax)와 의미론(Semantics)으로 구분
 언어 구문론 : 대부분의 언어가 Context-free 문법으로 표현
 Pascal if 문의 context-free grammar의 표현 방법
<if문> ::= if
<조건>
then
<문>
[else
<문>]
 언어 의미론
 언어 구문은 언어의 표면적인 구조만을 정의
 그러므로 의미론에 대한 형식화가 잘 이루어져 있지 않다.
 현재, 사용되고 있는 형식적 정의 방법
denotational semantics(상징적), axiomatic semantics(공리적)
프로그래밍 언어 소개
함수형 언어의 예

Modula-2의 예

LISP의 예
PROCEDURE gcd(u, v : INTEGRE) : INTEGER
BEGIN
IF v=0 THEN
배정문이나 반복문의 사용 없이
RETURN u;
수학적 이론에 근거를 둔 형태
ELSE
RETURN gcd(v, u MOD v);
END;
END gcd;
( define ( gcd u v) ( if (= v 0) u ( gcd v (remainder u v ) ) ) )
Return
프로그래밍 언어 소개
논리형, 객체지향 언어의 예

Prolog의 예
Ex) a :- b,c,d ( b,c,d가 참이면 a가 참이라는 의미)  clause(문장)
V=0이면 u와 v의 gcd는 u이다.
V > 0이면 u와 v의 gcd는 v와 u mode v의 gcd이다.
최대공약수의 논리(이론)

gcd(U, V, U) :- V=0.
gcd(U, V, X) :- V>0, Y is U mod V, gcd(V, Y, X).
Y는 중간 결과값의 이름
Simula 67의 예
class gcd(u, v) ;
참조형 :
integer u, v ;
ref(gcd) z;
begin
z:-new gcd(8,18);
integer procedure value ;
y:=z.value
begin
if v = 0 then value := u
className a;
else begin
b = new a( );
ref (gcd) x ;
c = b.value;
x :- new gcd(v, u mod v) ;
value := x.value ;
end ;
end value ;
end gcd ;
Return
Programming Languages
- The end of Chapter 1 -
To Be Continue ...