다음 내용은 PLT(강승식 prof(국민대)) 강의를 보며 정리한 내용입니다.
이후, 컴파일러 이론 및 형태소 분석 관련 내용도 정리될 예정입니다. (NLP 쪽 학습 예정임.)
1장
교과목 개요
- 다양한 프로그래밍 언어 소개
- 각 언어의 특징 및 응용 분야, 장단점 비교/분석
- 고급 언어로서 갖춰야 할 언어의 요건
- 언어의 기술 및 구현 방법 이해
- 고급 언어의 주요 기능
- 수식, 자료형, 조건문, 반복문의 구조 이해
- 각 언어에서 어떻게 구현되는가?
- 명령형, 함수형, 논리형, 객체 지항 언어의 차이점
프로그래밍 언어의 정의
: 프로그래밍 언어는 기계가 읽을 수 있고, 사람이 읽을 수 있는 형식으로 계산을 서술하기 위한 표기 체계이다.
- 계산
- Turing machine : 수학적 개념으로 형식적인 정의
- 컴퓨터가 수행 가능한 모든 작업
- Machine-readable
- Machine independant
- 모호하지 않고, 유한한 단계적 처리로 번역 가능한 알고리즘이 존재해야함.
- Human-readable
- 컴퓨터 행위를 읽기 쉽도록 "추상화"시키는 방법 제공
프로그래밍 영역과 고급 언어

프로그래밍 언어 배우는 이유
1) 현재 사용하는 언어 더 잘 이해
2) 유용한 프로그래밍 구사하는 능력 증대
3) 적합한 언어를 선택하는 능력 증대
4) 새로운 언어를 배우기 쉽게 해줌
5) 새로운 언어를 설계하기 쉽게 해줌
6) 구현의 중요성을 이해하고 이미 알고 있는 언어를 더 잘 사용
7) 생각을 표현하는 능력의 증진
8) 전반적으로 computing에 대한 이해도 향상
프로그래밍 언어에서 추상화
- Data abstraction
- 기본적 추상화
: 메모리에 저장되는 데이터 타입 제약
: char, int, float, double, bool, string, pointer
- 구조적 추상화
: 메모리 블록에 명칭 부여 -> 변수, 배열, 구조체
: type arr = array[1...10] of real;
- 단위 추상화
: 추상 자료형 : module, package, class
- Process abstraction
- 기계어 명령들 여러개 구조화시킴
: 고급 언어 수식 : numeric or logical expression
: 구조화된 무장 : if, for, while문 등
: 함수, 프로시저
- 기본적 추상화
: 여러개의 명령어를 모아 추상 구문으로 만듦
- 구조적 추상화
: 조건문, 반복문, 프로시저
- 단위 추상화
: 프로시저 집합 추상화 : module, package, class
계산 전형(computing paradigm)
프로그래밍 언어는 컴퓨터의 연산을 모방하고 추상화에서 시작됨.
- 명령의 순차적 실행, 기억 장소 위치를 표현하는 변수 사용
- 변수값 변경을 위한 배정문 사용
- 명령형 언어! (절차적 언어.) :: 여기서 주로 언급할 언어!(절반정도..)
- 함수형 언어! (Lisp)
- 함수의 평가 및 호출 방법 제공(applicative language)
- 변수와 배정문이 없음.
- 반복문이 없음 -> 재귀함수로 구현
- 논리형 언어 : Prolong
- 선언적 언어 (declarative language)
- 기호 논리학에 근거
- 객체 지향 언어
- 객체 : 기억 장소와 이 기억장소의 값을 변경할 수 잇는 연산의 집합
언어 정의
: 언어를 모호함이 없이 정의하는 정확한 형식
-
언어 구몬론(syntax)
: Context-free grammar(CFG), BNF, EBNF 등
<if문> ::=if<조건>then<문>[else<문>]
-
언어 의미론 (semantics)
: Denotational semantics
: Axiomatic semantics
: Opertional semantics
언어의 변천 관련 부분 (역사)는 정리하지 않음.