본문 바로가기
전공 관련/프로그래밍 언어 구조론

[프로그래밍 언어 구조론] 1장 정리

by 현댕5697 2021. 9. 6.
반응형

1. Programming language의 역사


1) Machine language(machine code)

특징:

- 폰 노이만이 고안한 컴퓨터 아키텍쳐는 operator을 통해 명령어를 연속적인 이진코드로 변환할 수 있었다.

이 이진코드들을 machine langauge라고 한다.

- machine laguage들은 fetch, decode, excution 과정을 거쳐 실행된다.

단점:

- 사람이 한 눈에 보고 이해하기 어렵다.

- 에러가 발생하기도 쉽다.

2) Assembly language

특징:

- assembly language는 명령 코드와 메모리 위치를 표현하는 연상기호의 집합이다.

- 어셈블러는 assembly language를 machine code로 변환하고, 로더는 machine code들을 컴퓨터 메모리에 저장한다.

단점:

- 수학적인 표기를 위한 추상화가 부족하다.

- 컴퓨터 하드웨어마다 사용되는 명령어 집합이 다르다.(통일성 x)

3) FORTRAN

특징:

- 대수적 표현법과 부동소수점을 지원하였다.

단점:

- structured control statement와 data structure 지원이 부족하다.

4) ALGOL

특징:

- structured control statement를 제공하였다.(ex: loop문, if-else문...)

- 여러 개의 숫자 형식과 배열을 지원하였다.

- 하드웨어 종류와 무관하다. 대신, 각 하드웨어 종류에 맞는 ALGOL 컴파일러가 필요했다.

- 많은 high-level 언어들이 ALGOL을 계승하였다.

 

2. Abstraction


추상화에서 필요한 것

- 디테일은 숨기기

- 중요한 부분을 보여주기

추상화의 타입

- data abstraction: 자료의 행동, 특성을 추상화(ex: 숫자, 문자열, 검색 트리...)

- control abastraction: control 특성을 추상화(ex: loop문, 조건문, 프로시저 호출...)

추상화 단계(정보의 양과 관련)

- basic abstraction: 가장 localized된 기계 정보를 수집

- structured abstraction: 프로그램 구조에 대한 중간 정보를 수집

- unit abstraction: 프로그램에서 큰 규모의 정보를 수집

1) Data abstaction

1️⃣ basic control abstraction

- 데이터 값의 표현을 숨기는 것

- data type: 데이터 값의 종류에 대한 이름을 제시

- declaration: 변수 이름과 데이터 타입을 제공하는 과정

2️⃣ structured abstraction

- 하나의 unit 안에서 데이터 값과 관련된 것을 모으는 것

- 여러 개의 데이터 타입 제공

- 배열: 같은 데이터 타입의 여러 데이터를 연속된 인덱싱된 아이템으로 표현

- txt 파일: 연속된 문자들을 외부 저장 기기로 부터 가져오기/내보내기 지원

1️⃣ unit abstraction

- 데이터 타입과 관련이 있다.

- 데이터 값들과 값들에 대한 명령어들의 집합

- 재사용성을 제공한다.

2) Control abstraction

1️⃣ basic control abstraction

- 몇몇 기계 명령어들을 합쳐 이해하기 쉬운 추상구문으로 만듦

2️⃣ structured abstraction

- 프로그램을 실행을 좌우하는 루틴? 안의 중첩된 명령어들의 집합으로 나눔

ex: branch intstruction, iterator, prodedure, function...

3️⃣ unit abstraction

- 프로그램의 특정 부분에 대해 논리적으로 연관된 기능을 제공하는 프로시저의 집합

- 프로그램이 제공된 unit의 기능 상세 정보를 알지 못해도 돌아갈 수 있도록 함

ex: thread, proccess, task...

 

3. Programming Paradigms


1) imperative paradigm

- 3가지 특징을 가진 언어

1️⃣ 명령을 표현하는 구문의 시퀸스로 표현

2️⃣ 메모리 위치를 나타내기 위해 변수를 사용

3️⃣ 변수의 값을 바꾸기 위해 할당 사용 

2) functional paradigm

- applicative language

- lambda calculus에서 함수의 추상적인 표현을 바탕으로 함

- 변수나 할당이 허용되지 않음

- 반복문이 존재하지 않음

- 재귀함수 이론의 특성을 따름

1️⃣ 정수값

2️⃣ 산술 함수

3️⃣ 기존 함수, 선택 및 재귀 기능을 사용하여 새 함수를 정의하는 메커니즘

3) logic paradigm

- declarative language

- 프로그램은 boolean값으로 표현되는 주장의 집합으로 구성
- 기본 시스템이 제어 흐름을 결정
- 매우 high-level 언어이다

4) object-oriented paradigm

 

4. Language definition


- syntax: 프로그램의 구조

- semantics: (실행)프로그램의 의미

1) syntax 정의

- token: 프로그래밍 언어의 어휘 (ex: 키워드, 명령어 기호..)

- lexical structure: 프로그래밍 언어의 어휘구조

- context-free grammar사용

2) semantics 정의

- 모든 맥락에서 의미에 대한 포괄적인 설명을 제공하기는 어려움

 

5. Language translator(=language processor)


- 프로그램 언어를 받아서 실행

- interpreter: 프로그램을 즉시 실행

- compiler: 실행에 적합한 형태로 프로그램을 제작하여 실행

- pseudo-interpreter: 위의 두 방식을 혼합

 

6. Error handling


1) syntax error

프로그램 형식이 잘못되었을 때 발생하는 에러

2) semantic error

- static semantic error: 컴파일링 하는 동안 감지되는 에러 (ex: 타입 에러...)

- dynamic semantic error: run-time 동안 감지되는 에러 (ex: division-by-zero)

3) logic error

- 프로그래머가 원한 값과 다른 값을 내놓는 경우

- 사실상 잡아내기 어렵다. 프로그래머가 잡아내야 한다.

예시)

public int gcd ( int v# )
{ 
  int z = value
  y = v; 
  while ( y >= 0 )
  { 
    int t = y; y = z % y; z = t;
  }
  return y;        
}

1번째 줄: lexical error (변수에 특수문자가 포함되면 안됨)

3번째 줄: syntax error (세미콜론 빠짐)

4번째 줄: static semantic error (y가 정의되지 않음)

5번째 줄: dynamic semantic error (y가 0일 수 있음 = division by zero)

9번째 줄: logic error (t 대신에 y가 반환 됨)

 

 

반응형

댓글