728x90
반응형

저급언어

- 기계 중심의 언어로 배우기 어렵다

- 기계가 이해할 수 있도록 만들어진 언어이다

- 호환성이 떨어진다

- 기계어, 어셈블리어 등의 언어는 저급 언어이다

고급언어

- 사람 중심의 언어로, 배우기 쉽다

- 개발자가 원시 프로그램을 작성할 때 쉽게 이해할 수 있도록 작성된 언어이다

- 호환성이 좋다

- C,C++,Java,COBAL,FORTRAN 등이 해당된다

- 기계어로 번역이 필요하다

기계어

- 2진수 0과 1만 사용하여 명령어와 데이터를 나타낸다

- 언어 번역 과정이 필요없다

- 호환성이 없다

- 유지보수가 어렵다

원시 프로그램 : 기계어로 번역되기 전 프로그래머에 의해서 작성된 프로그램 파일

목적 프로그램 : 기계어로 번역된 프로그램 파일 (0과1로 구성)

 

 

 

 

언어 번역 프로그램

 

어셈블러 : 저급언어를 기계어로 변환시킴 (어셈블리어)

컴파일러 : 고급언어를 기계어로 변환시킴 (C, C++, PASCAL, FORTRAN)

*기계어 = 목적 프로그램*

- 빠르다, 번역시 장소를 확보

인터프리터 : 원시 프로그램을 입력으로 받아 기계어로 변환하지 않고 직접 실행

(BASIC, PROLOG, LISP, PYTHON)

- 반복문 사용시 컴파일러에 비해 불리함, 실행시 장소를 확보

- 대화식 프로그램일 경우 컴파일러에 비해 유리함

=> 컴파일러와 인터프리터의 가장 큰 차이점은 목적 프로그램의 생성 유무

프리프로세서 : 고급 언어를 또 다른 고급 언어로 번역하는 고급 언어 번역기

크로스 컴파일러 : 컴퓨터 기종이 다른 경우에 사용되는 컴파일러

매크로 프로세서 : 어셈블리어를 사용하기 쉽도록 명령어들을 매크로(문자)로 치환하여 확장시킴

 

 

 

프로그램 수행 순서

 

원시 프로그램 -> 컴파일러 -> 목적 프로그램 -> 링커 -> 로더 -> 실행

링커 : 여러개의 목적 파일을 하나의 프로그램으로 연결한다

로더 : 프로그램이 실행될 수 있는 환경을 설정하고 프로그램을 주기억 장치에 적재한다

[절대로더 : 할당(프로그래머) -> 연결(프로그래머) -> 재배치(어셈블러) -> 적재(로더)]

실행 : CPU에 의해서 프로그램이 실행된다

컴파일러 단계

어휘분석 -> 구문분석 -> 의미분석 -> 중간 코드 생성 -> 코드 최적화 -> 코드 생성

 

 

 

 

 

 

 

 

자료 객체

 

예약어 : 용도가 정해져있는 단어 (for, while, if 등)

변수 : 기억 장치의 한 장소를 추상화한 것으로 프로그램이 동작하는 동안 값이 수시로 변할 수 있음

+ 어떤 값을 주기억 장치에 기억하기 위해 사용하는 공간

상수 : 수명 시간 동안 고정된 하나의 값과 이름을 가진 자료로써, 프로그램이 동작하는 동안 값이 절대로 바뀌지 않는 것을 의미함

식별자 : 프로그램의 구성 요소를 구별하기 위한 기준, 변수명이 식별자에 속함

선언 : 변수 이름을 나열하고 속성을 부여하는 것 (상수 값에 의해 속성이 부여되기도 함)

할당 : 변수에 메모리 공간을 바인딩하는 작업

배열

- 같은 크기와 타입의 자료를 연속적인 기억 장치에 저장하여 처리하는 구조

- 고정 크기의 메모리 공간을 사용

- 연속적인 기억장치를 사용 (논리적, 물리적 순서 동일)

- 중간에 삽입, 삭제가 어려움

- C언어의 선언 : int A[2][5];

- Java의 선언 : int[][]A = new int[2][5];

포인터

- 변수명에는 실제 기억 장소의 위치인 절대 번지가 존재하는데, 이를 주소 상수라고 하거나 포인터 상수라고 함

- 변수 a의 포인터 상수는 &a로 사용하면 된다

- 커다란 배열에 원소를 효율적으로 저장하고자 할 때 이용함

바인딩 : 변수의 명칭, 메모리 주소, 데이터형 또는 실제 값을 연결하는 것을 의미함 (변수들이 갖는 속성 결정)

=> 정적 바인딩은 프로그램 실행 시간 전, 동적 바인딩은 프로그램 실행 시작 후의 속성을 연결하는 것

728x90
반응형

+ Recent posts