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 ...