프로그래밍 언어란 계산과정을 기계와 사람이 읽을 수 있는 표기법
프로그래밍 의도를 추상화시켜 컴퓨터에 전달
처리수준에 따라
고급, 저급, 기계어
고급언어는 일상적인 언어 수준에 가꾸운 언어
저급언어는 기계어와 1:1대응되는 기계 중심적 언어(어셈블리어)
기계어는 기계가 직접 이해할 수 있는 0,1의 2진 언어
구현 기법에 따라
translation, interpreter
번역기법은 컴파일러, 어셈블러, 링커, 로더, 프리프로세서로 구분
인터프리터는 프로그램 소스를 한줄씩 해석해가며 실행
사례로 파이썬 자바스크립트 SQL, Ruby, Scratch 등
컴파일러 언어는 C, C++, Java
프로그래밍 언어를 만든다 == 인터프리터 혹은 컴파일러 설계, 구현
명령형 언어
절차형과 비스산 의미
폰 노이만 구조에 기반
변수 배정문 반복문 사용
대입문으로 변수 값 변경
명령문의 나열
Cobol, C, Ada, Fortran, Python등 대부분 언어
객체 지향형 언어
실세계를 모의실험 하는 언어
메세지 전달, 상속, 다형성 등의 특징이 있음
프로그램 실행은 객체 사이의 상호작용
객체는 attribute와 method로 표현함
계산과정은 객체 사이의 메소드 호출.
클래스는 객체에 대한 객체에 대한 타입 정의, 객체는 클래스의 인스턴스
C++, Java, C# Swift Python Basic 등
함수형 언어
프로그램 계산과정을 함수형태로 모델링
프로그램은 함수들로 이루어짐
특정 컴퓨터 구조에 독립적
함수 정의, 호출, 매개변수, 반환값이 있음
변수 대입문 사용 없음. 자기호출, 재귀에 의한 반복
Lisp, ML, Haskell 등
4.논리형 언어
루프나 선택문 등의 제어 추상화가 없다.
선언적으로 프로그래밍 할 수 있다
Prolog
구문론
오늘날 대부분의 언어가 문맥자유 문법 사용
프로그래밍 언어의 언어구조는 토큰이라고 함
문맥자유문법은 문맥에 영향을 받지 않는 문법
비단말 기호, 단말기호, 시작 비단말 기호, 규칙으로 구성
비단말 기호 = 정의될 대상
단말기호 = 언어에서 사용되는 표현
시작 비단말 = 언어에서 독립적으로 사용되는 단위
규칙 = 비단말 기호를 단말기호와 비단말 기호의 조합으로 정의
각 규칙은 하나의 비단말 기호만을 정의
의미론
프로그램 실행시 어떤 일이 일어나는지 기술
프로그래밍 언어의 구성요소
이름, 타입, 구문, 의미구조
서브프로그램
특별한 코드의 일부분을 별개의 단위로 묶어서 지칭
결과 값을 반환하는 서브 프로그램 = 함수
반환하지 않는 서브프로그램 = 프로시저
void함수는 프로시저라고 할 수 있음
모듈
독립적인 프로그램 구성단위. 프로그램 재사용에 활용
서브프로그램도 모듈이라고 볼 수 있음
각각 독립적인 네임스페이스를 차지
translation은 컴파일러 어셈블러 링키지 에디터, 로더, 프리프로세서로 이루어짐
컴파일러는 저급언어로 번역 어셈블러가 언어를 준기게형태
링키지 에디터는 여러개의 프로그램을 묶어서 로드 모듈 생성 로드 모듈은 어느정도 실행 가능한 기게어 프로그램
로더는 로드 모듈을 실제 실행 가능한 기계어로 번역하여 주기억 작이체 적재
프리프로세서는 원시 언어와 목적 언어가 모두 거급 언어인 번역기
고급 언어 프로그램을 다른 고급 언어로 번역
번역기법 컴파일러의 장점은 실행시간 효율성
한 번 디코딩하고 반복 실행 가능
큰 기억장치를 요구하는것이 단점
인터프리터 기법은 유연성이 있음
현재 대부분 인터프리터 언어는 하이브리드 기법
실행시키기 쉬운 중간 형태 코드로 번역을 하고 실행
컴파일러는 기계코드 생성
실행기는 명령을 실행
1950년대
고급 프로그래밍 언어의 시작
FORTRAN 최초의 고급 언어
과학응용 분야를 위함
COBOL 사무용 영어와 비슷한 구문
LISP 리스트 자료구조와 함수적용 기반 후속언어가 Scheme
1960년대
Algol 알고리즘 기술을 위한 언어
PL/I, Simulal-67,
BASIC 교육용 언어로 많이 사용 microsoft에 의해 visual Basic으로 발전
1970년대
PASCAL 교육용 언어
C 유닉스 운영체제 개발을 위한 언어 시스템 프로그래밍 중급 언어 모든 컴퓨터 시스템에서 사용할 수 있도록 설계
Prolog 인공지능 자연어 처리 등에서 사용
Scheme, ML
1980년대
Ada
미 국방 성 후원으로 개발된 언어
추상 자료형, 병행 프로그래밍 등의 기능 포함
Modula-2,Smalltalk
C++ C확장 구조체를 클래스 형태로 확장 객체지향 프로그래밍 가능
1990
Python 대화형 인터프리터 방식
Java JVM이 설치된 어느 플랫폼에서든 실행가능
Javascript
2000
C# .NET프레임워크 기반
Scala 객체지향과 함수형 언어의 요소의 결합 JVM에서 실행가능 JAVA호환
Objective-C, Swift Mac용 언어
기본 구성에 필요한 뼈대 = 프레임워크
모듈화
설계와 구현 변경에 따른 영향 극소화
재사용성
확장성
다형성
제어의 역흐름
특정 이벤트가 발생했을 때 다형성을 통해 메소드를 호출함으로써 제어가 거꾸로 흐를 수 있다