Major in CS/Programming Language(프로그래밍 언어론)

Programming Language 정리(2)

SHJuan 2018. 9. 30. 15:38

Machine Architecture and Language


Von Neumann Computer Architecture

1. 메모리(Memory)

정보 및 프로그램을 담는 공간


2. 중앙처리장치(Central Processing Unit)

정보를 처리


3. 입출력(Input/Output Device)

정보를 외부로부터 받고 보내줌 


4. 그 외

main board, power supply, graphic card, etc.


Programming Language의 주된 구성요소

1. Data

Elementary Data Type(간단한 자료형, 정수형, 실수형 등) & Structured Data Type(구조화된 자료형, 구조체나 객체가 해당)

Built-in Data & User-Defined Data


2. Operations

Data를 다루는 것(Manipulate)

수리연산(Arithmetic), 논리연산(Logic), 수정이나 할당 연산 등이 있음.


3. Sequence Control

명령을 수행하는 방식

Program Address Register(PAR, 혹은 Program Counter, PC라고도 함)를 이용, 다음에 실행할 명령의 주소를 가리킴.


4. Data Access

정보에 접근하고 정보를 다루는 방식

Serial Access(순차 접근, 하나씩 접근하는 방식) & Parallel Access(병렬적으로 접근하는 방식)


5. Storage Management

저장공간을 다루는 방식

저장공간은 계층 구조를 이루고있다. (Register → Cache → Memory → Storage)

상위 계층의 저장공간에 존재하는 정보는 항상 하위계층에도 존재해야 한다.


6. Operational Environment

외부 기기(CD-ROM, SD Card, Tape, Modem, etc.)와의 상호 소통을 다루는 방식


Syntax 분석과 Semantic

Syntax: 문법(Grammar)과 표현방식(Notation)으로 구성됨.


Grammar: <T,N,P,S> → Terminal, Non-Terminal, Production, Start Symbol로 나타낸다.

Terminal

Alphabet, Symbol. 한 Language에서 사용하는 최소단위의 문자

Non-Terminal

여러개의 Terminal이 Production에 의해 조합된 String

Production

Rule. 규칙

Start Symbol

Language에 포함된 모든 String을 만들어내기 위해 처음으로 사용하는 Terminal.


Notation: Backus-Naur Form(BNF)를 사용한다.

ex) <hangeul> ::= ㄱ|ㄴ|ㄷ|...|ㅍ|ㅎ|ㅏ|ㅑ|.....|ㅡ|ㅣ


Compiler의 구조

1. 소스코드


2. Lexical Analysis

명령 한 줄을 Symbol 단위로 토큰화한다.


3. Syntax Analysis

문법적으로 오류가 있는지 검사한다.


4. Semantic Analysis

문법적으로 오류가 없는 명령에 대하여, 그 명령이 어떤 뜻인지 알아낸다. 


5. Intermediate Code

실제 Assembly Code가 되기 전의 상태. 여기서 적당한 Optimization을 거쳐 Assembly Code를 완성한다.



Language Binding Time

Programming Component들에 대해서 특정한 의미나 특성을 부여하는 시간.


1. Language Definition Time

말 그대로, Programming Language를 처음 정의하는 단계이다. 

이때, 자료형, 자료구조, 연산자를 정의한다.


2. Language Implementation Time

PL을 실제 구현하는 단계이다.

특정 자료형이 가질 수 있는 값의 범위라든지, 숫자들의 표현을 결정한다.


3. Program Translation(Compile) Time

프로그램을 작성하고, 컴파일 하는 단계이다

Programmer: 변수 이름, 변수의 자료형, 

Translator: 정보의 상대적인 위치(배열)

Loader: 변수 주소할당


4. Run Time

프로그램이 실제 실행되는 단계이다.

변수의 값이나 저장위치가 이 때 결정되고, 특히 Python같이 자료형을 명시하지 않고 변수를 쓰는 경우 이 단계에서 자료형이 정해진다.