320 likes | 612 Views
프로그래밍 언어. 프로그래밍 언어의 개요 프로그래밍 언어의 구문 정의 변수와 영역 자료형 조건문과 반복문 부프로그램. 프로그래밍 언어 개념에 대해 살펴본다 . 프로그래밍 언어의 구문을 정의하는 대표적인 표기법인 BNF 에 대해 살펴본다 . 변수의 개념과 영역의 개념에 대해 살펴본다 . 다양한 자료형에 대해 살펴본다 . 실행 순서에 변화를 가져오는 조건문과 반복문에 대해 살펴본다 . 하나의 단위로 만들어진 기능인 부프로그램에 대해 살펴본다. 프로그래밍 언어
E N D
프로그래밍 언어 • 프로그래밍 언어의 개요 • 프로그래밍 언어의 구문 정의 • 변수와 영역 • 자료형 • 조건문과 반복문 • 부프로그램 한빛미디어(주)
프로그래밍 언어 개념에 대해 살펴본다. • 프로그래밍 언어의 구문을 정의하는 대표적인 표기법인 BNF에 대해 살펴본다. • 변수의 개념과 영역의 개념에 대해 살펴본다. • 다양한 자료형에 대해 살펴본다. • 실행 순서에 변화를 가져오는 조건문과 반복문에 대해 살펴본다. • 하나의 단위로 만들어진 기능인 부프로그램에 대해 살펴본다.
프로그래밍 언어 • 컴퓨터에서 일을 수행하기 위한 명령문의 집합인 프로그램을 작성하기 위해 사용하는 기호 체계 • 저급 언어(low level language)와 고급 언어(high level language)로 분류 • 기계어 • 컴퓨터가 직접 이해할 수 있는 유일한 언어 • 효율성은 높지만 언어 자체가 복잡하고 어려움 • 컴퓨터의 종류에 따라 다르며, 컴퓨터에 의존적인 경향을 띄어 표준이 없음 • 어셈블리어 • 어려운 기계어의 명령들을 쉬운 기호로 나타낸 것 • 모든 컴퓨터들의 어셈블리어는 같지 않음 • 기계어에 비해 프로그램을 작성하기가 쉽고, 고급언어와는 달리 하드웨어에 직접적인 접근을 하기 때문에 수행 속도가 빠른 장점
어셈블리어 • 고급언어 • 컴파일러 : 고급언어로 작성된 프로그램을 컴퓨터는 직접 이해할 수 없으므로 기계어 프로그램으로 번역하는 소프트웨어 [그림 6-1] 어셈블러의 역할 [그림 6-2] 컴파일러의 역할
BNF(Backus-Naur Form) • 프로그래밍 언어의 구문을 기술하기 위하여 가장 일반적으로 사용되는 표기법 • 1960년 ALGOL 60이란 언어의 구문을 정의할 때 최초로 사용 • BNF 예 • ‘AA2’라는 식별자가 문법에 맞는지 살펴보자.
파스 트리(parse tree) : 유도 과정을 트리로 나타낸 것 • [예] 배정문 [그림 6-3] ‘AA2’에 대한 파스 트리
‘AA = B - 20’이라는 배정문이 문법에 맞는지 살펴보자. • 주어진 규칙을 이용해서 ‘AA = B - 20’이 유도되므로 문법에 맞는 배정
BNF 예(2) • 파스 트리 [그림 6-4] ‘AA = B - 20’에 대한 파스 트리
변수 • 다음과 같은 속성들이 모여서 변수의 개념이 형성 • 선언문에 의해 변수 선언 ① 변수 이름 : x가 된다. 변수의 이름은 약간의 규칙이 있지만 프로그래머가 임의로 정할 수 있다. ② 변수형 : 변수가 가질 수 있는 값들의 자료형으로, 변수 x는 정수형이 된다. ③ 변수 주소 : 변수가 위치하고 있는 메모리 주소인데, 다음은 변수 x가 메모리 주소 0x1000~0x1003에 위치함을 의미한다. [그림 6-5] 변수 x의 주소
④ 변수 값 : 배정문에 의해 부여되는데, 'x=10;'은 변수 x에 10을 저장하는 C 언어 배정문이다. 이런 변수의 값은 그 변수가 위치하고 있는 메모리 영역에 저장된 내용을 말하는 것으로, 변수 x의 값은 10이 된다. ⑤ 변수 영역 : 앞으로 살펴보자. • 영역 • 그 이름의 사용이 허락되고 있는 프로그램 범위 • 정적 영역 규칙 • ALGOL 60에서 도입, 현재 대부분의 언어에서 사용 • 이름에 해당하는 변수를 찾을 때 외향적인 구조에 따라 동작하는데, 자신을 포함하고 있는 블록에서 선언되었는지 살펴보고 아니면 그 바깥쪽 블록에서 선언되었는지를 조사
정적 영역 규칙 • 앞 프로그램 실행 순서 ① 02행에서 a와 b를 선언하고, 14행에서 a에 0을, b에 1을 저장한다. 15행에서 func를 호출한다. ② func를 호출하면 07~12행이 실행된다. 08행에서 변수 a와 b를 선언하는데, 02행의 변수 a, b와는 이름은 같지만 전혀 다른 변수다. 10행에서 a에 2를, b에 3을 저장하고, 11행에서 print를 호출한다. ③ print를 호출하면 03~06행을 실행하여 05행에서 a와 b의 값을 출력한다. 05행의 a와 b를 포함하고 있는 블록(03~06행)에서 a와 b를 선언하고 있는지 살펴보았는데, 선언된 부분이 없다. 그러므로 그 바깥쪽 블록(01~16행)에서 a와 b를 선언하고 있는지 살펴보았는데, 02행에서 선언하고 있는 것을 볼 수 있다. 이 블록의 14행에서 a에 0을, b에 1을 저장했으므로 0과 1이 출력된다. [그림 6-6] 프로그램 예
동적 영역 규칙 • APL, SNOBOL 4 그리고 LISP 초기 버전에서 적용된 방식 • 이름에 해당하는 변수를 찾을 때 외향적인 구조에 기반하지 않고, 부 프로그램들의 호출 순서에 기반 • 먼저 자신을 포함하고 있는 블록에서 선언되었는지를 보고 아니면 자신을 포함한 블록(부 프로그램)을 호출한 문장을 포함하고 있는 블록에서 선언된 것인지를 조사 • 앞의 프로그램을 이용한 설명 • 05행을 포함한 블록(03~06행)에서 a와 b를 선언하고 있는지를 살펴보는데, 선언된 부분이 없다. • 그러면 이 블록(print)을 호출한 문장(11행)을 포함하고 있는 블록(07~12행)에서 a와 b를 선언하고 있는지를 살펴보는데, 08행에서 선언하고 있는 것을 볼 수 있다. 이 블록의 10행에서 a에 2를, b에 3을 저장했으므로 2와 3이 출력된다.
자료형 • 저장할 수 있는 값의 집합뿐만이 아니라 수행할 수 있는 연산의 집합까지 포함 • 자료형은 기본 자료형, 구조적 자료형 그리고 포인터 자료형 등으로 구분 • 기본 자료형 • 수치형 • 정수형 • int형이 short int형보다는 크기가 크거나 같고, long int형이 int형보다는 크기가 크거나 같다. • 부동소수점형 : 실수를 표현하는 방식
부울형 • 부울형은 참과 거짓이라는 두 개의 값을 갖는데, 수식이 참인지 거짓인지를 파악할 때 사용된다. • 부울형 자료에 대한 대표적인 연산으로 and, or, not이 있는데, x와 y가 부울형 일 때 다음과 같이 동작한다. [표 6-1] and, or, not 연산
문자열형 • PL/Ⅰ : 문자열을 값으로 가질 수 있는 변수를 선언할 수 있는 최초의 언어 • 길이가 10인 문자열 변수 A를 선언 • 문자열과 관련된 연산 • |는 문자열과 문자열을 연결 • LENGTH(A)는 문자열 A의 길이를 반환 • SUBSTR(A, I, J)는 문자열 A의 I번째 문자로 시작해서 J개의 문자열을 추출 • INDEX(A, B)는 문자열 A에서 문자열 B의 위치를 찾음 • VERIFY(A, B)는 문자열 A에서 문자열 B에 속하지 않는 첫 번째 문자의 위치를 찾음 • TRANSLATE(A, B, C)는 문자열 A에서 C에 있는 문자들을 B에 있는 문자들로 교체
구조적 자료형 • 여러 자료를 묶어서 하나의 단위로 처리하는 자료형 • 배열은 집합체에서의 위치로 원소를 식별하는 동질형 자료의 모임, 레코드는 이름으로 원소를 식별하는 이질형 자료의 모임 • 배열 • 이름, 배열의 차원, 배열 원소의 형, 첨자 범위 등으로 특징 • FORTRAN, Ada에서는 이름이 A이고 크기가 2×3인 2차원 배열을 다음과 같이 소괄호를 이용해서 나타냄 • ALGOL 60, Pascal 등 대부분의 언어는 다음과 같이 대괄호를 이용해서 나타냄 • 이름이 A, 크기가 5 그리고 원소의 형이 정수형인 1차원 배열을 선언(C 언어) [그림 6-7] 배열 A의 구조
레코드 • 이질형 자료의 모임 • 1960년대 초기에 COBOL에서 도입 • C 언어의 구조체(structure) • 정의된 구조체인 struct student형의 변수 선언 • 필드에 접근 [그림 6-8] 구조체형 변수 A의 구조
조건문 • 조건문은 조건에 따라 둘 또는 그 이상의 실행 경로 중에서 하나를 선택할 수 있는 수단을 제공 • 양자택일문과 다자택일문 으로 구분 • 양자택일문 • 양자택일문을 처음 도입한 언어 : ALGOL 60 • C 언어의 if-else 구조 [그림 6-9] if-then-else 구조 • if-else 구조에서 다음과 같은 경우에 else가 첫 번째 if와 연결되는 것인지 두번째 if와 연결되는 것인지 해석이 어려운 경우가 발생
만약 참이거나 거짓인 경우에 실행되어야 하는 문장이 여러 개인 경우 • 가장 가까이 있는 if와 연결되므로 두번째 if와 연결되는 것이다. 만약 첫번째 if와 연결을 시키려면 중괄호를 이용
양자택일문 • else-if 구조 [그림 6-10] else-if 구조
다자택일문 • ALGOL-W의 case 문이 처음 도입된 다자택일문 • C 언어는 switch 문
반복문 • 특정 부분을 반복해서 실행하는 구조 • FORTRAN의 DO 문 • 변수 I가 1의 초기값을 갖고 한 번씩 반복할 때마다 1씩 증가되면서 5보다 작거나 같은 동안 ⋮ 부분을 실행한다. • while 문 • 만약 반복하고자 하는 문장이 여러 개인 경우 [그림 6-11] while 구조
do-while 문 • 다음과 같이 중괄호로 묶는 것이 바람 직하다 [그림 6-12] do-while 구조
for 문 • 초기식, 조건식, 변환식 등 수식은 생략해도 되지만 수식을 생략할 경우라도 세미콜론(;)은 생략이 불가능 • 초기식을 생략할 경우 [그림 6-13] for 구조
기능A를 여러 번 실행하는 프로그램 구조 • 기능A를 하나의 단위로 만든 프로그램 구조 : 부프로그램 [그림 6-14] 기능 A를 여러 번 실행하는 프로그램 구조 [그림 6-15] 기능 A를 하나의 단위로 만든 프로그램 구조
부프로그램 • 부프로그램A를 ‘부프로그램 정의’ 부분이라 하고, 부프로그램이 실행되도록 명령하는 문장을 ‘부프로그램 호출’이라 함 • 부프로그램이 있는 프로그램의 실행 순서 [그림 6-16] 부프로그램이 있는 프로그램 구조 [그림 6-17] 부프로그램이 있는 프로그램의 실행 순서
부프로그램의 종류 • 서브루틴(subroutine)과 함수(function)로 구분 • 함수가 있는 프로그램의 동작 [표 6-2] 부프로그램의 종류와 차이점 [그림 6-18] 함수가 있는 프로그램의 동작
매개변수 • 매개변수를 이용하면 실행될 부프로그램에게 값을 전달할 수 있음 • 부프로그램의 형식 • 호출 형식 • C 언어에서 function이라는 함수를 정의하는 예 • 함수를 호출
매개변수 전달 방식 (C 언어) • 값에 의한 전달 • 실 매개변수의 값을 형식 매개변수에 저장해서 동작하는 방식 [표 6-3] C 언어에서의 매개변수 전달 방식 [그림 6-19] 값에 의한 전달
주소에 의한 전달 • 실 매개변수의 주소를 형식 매개변수에 저장해서 동작하는 방식 [그림 6-20] 주소에 의한 전달에서의 실 매개변수와 형식 매개변수 [그림 6-21] 주소에 의한 전달