제 5장 변수, 바인딩, 식 및 제어문 5.1 변수 5.6 표현식 5.2 바인딩 5.7 조건문 5.3 선언 5.8 반복문

Slides:



Advertisements
Similar presentations
Copyright © 2015 Pearson Education, Inc. 6 장 : 프로그래밍 언어.
Advertisements

YES C 제 1 장 C 언어의 개요 1/34 제 1 장 C 언어의 개요 문봉근. YES C 제 1 장 C 언어의 개요 2/34 제 1 장 C 언어의 개요 1.1 프로그램과 C 언어의 특징 1.2 C 언어의 프로그램 구성 1.3 비주얼 C++ 통합 환경 들어가기.
Copyright © 2006 The McGraw-Hill Companies, Inc. 프로그래밍 언어론 2nd edition Tucker and Noonan 5 장 타입 “ 타입은 컴퓨터 프로그래밍의 효소이다 ; 프로그래밍은 타입을 통해 소화할만한 것이 된다.” 로빈.
2011년 월별 영업일수 정리 2011년 월별 Calendar (단위: 일)
제 4 장 변수, 영역, 수명 변수 바인딩 영역 기억장소 할당과 수명 변수와 그 환경 변수 초기화 상수와 변수.
8장 프로그래밍 언어 8.1 프로그램이란? 8.2 프로그램 언어의 역사 8.3 프로그램 설계 절차
VISUAL BASIC 양 계 탁.
PL/SQL.
C++ Espresso 제1장 기초 사항.
제 1장 C 언어의 소개.
제 3장 프로그래밍 언어 설계 3.1 설계 기준의 역사적 변천 3.2 효율성 3.3 일반성, 직교성, 획일성
Chapter 3 – 프로그래밍 언어 설계 Outline 3.1 설계 기준의 역사적 변천 3.2 효율성
3 2 년 1 나만의 하나뿐인 달력~♥ sujin.
쉽게 풀어쓴 C언어 Express 제13장 구조체 C Express Slide 1 (of 25)
알기 쉽게 해설한 Java 8th edition
제 7 장 문장 구조화 제어문 지정문 조건문 반복문 GOTO 문 비결정적문.
제 6장 변수, 바인딩, 식 및 제어문 6.1 변수 6.6 표현식 6.2 바인딩 6.7 조건문 6.3 선언 6.8 반복문
제 12장 예외 처리 12.1 설계 쟁점 12.2 PL/I의 ON-조건 12.3 Ada의 예외 처리
4장 구문(Syntax).
데이터 구조 - 소개 순천향대학교 컴퓨터공학과 하 상 호.
제6장 제어(Control) 6.1 구조적 프로그래밍(Structured Programming)
알고리즘(Algorithm)  알고리즘 개요 (효율, 분석, 차수) Part 1 강원대학교 컴퓨터과학전공 문양세.
제 2장 언어의 변천 2.1 디지털 컴퓨터 이전의 언어 년대 : 최초의 프로그래밍 언어
Chapter 11 – 예외 처리 Outline 11.1 설계 쟁점 11.2 Pl/I의 예외 처리 11.3 Ada의 예외 처리
10장 예외 처리 프로그래밍 언어론 10.6 Pascal과 C의 에러 처리 10.1 설계 주제 10.2 PL/I의 예외 처리
제 6 장 데이터 타입 6.1 데이터 타입 및 타입 정보 6.2 타입의 용도 6.3 타입 구성자 6.4 사례 연구
Ruby 프로그래밍 1 문자열 입출력 제어구조 looping 함수 정의
2주 실습강의 Java의 기본문법(1) 인공지능연구실.
Chapter 02 자바 기본구조 자바 프로그래밍의 기초적인 문법을 소개
제7장 제어구조 I – 식과 문장.
제 5 장 자 료 형 기본 데이터 형 포인터 형 배열 데이터 형 스트링 집합 형 레코드 공용체 형 형 시스템.
제 6 장 프로세스 동기화 (Process Synchronization)
바인딩, 메모리 관리 SANGJI University Kwangman Ko
프로그래밍언어론 2nd edition Tucker and Noonan
4장 병행 프로세스 병행성의 원리를 이해한다 병행 프로세스 수행과 관련된 상호 배 제 해결방안을 알아본다
3장 (2) 구문과 의미론 순천향대학교 컴퓨터공학과 하상호.
Chapter 6 – 변수, 바인딩, 식 및 제어문 Outline 6.1 변수 6.2 바인딩 6.3 선언 6.4 배정문
Chapter 9 – 부 프로그램 Outline 9.1 개요 9.2 매개변수 평가와 전달기법 9.3 형식 매개변수 명세
Ch2-2. VHDL Basic VHDL lexical element VHDL description
장. 문법 구조(Syntax) 컴퓨터공학과 권기태 프로그래밍언어론.
DataScience Lab. 박사과정 김희찬 (월)
4 병행 프로세스와 상호배제.
4장 제어문 선택문: if 문, if – else 문, switch 문
5장 이름, 바인딩, 영역(2) 순천향대학교 컴퓨터공학과 하상호.
제 10장 부 프로그램 10.1 개요 10.2 매개 변수 평가와 전달 기법 10.3 형식 매개 변수 명세
6장 데이터 타입(2) 순천향대학교 컴퓨터공학부 하 상 호.
프로그래밍 보고서 작성법 순천향대학교 컴퓨터공학과 하 상 호.
제 6 장 프로세스 동기화 (Process Synchronization)
Introduction to Programming Language
Java의 정석 제 2 장 변수(Variable) Java 정석 남궁성 강의
알고리즘(Algorithm)  알고리즘 개요 (효율, 분석, 차수) Part 년 봄학기
6장 데이터 타입(2) 순천향대학교 컴퓨터공학부 하 상 호.
2. 상호배제와 동기화 01 program versionone; // 첫 번째 버전
프로그래밍 원리 Chapter 04 자료 처리와 연산자 신한대학교 IT융합공학부 박 호 균.
6장 데이터 타입(3) 순천향대학교 컴퓨터공학부 하 상 호.
프로그래밍언어론 2nd edition Tucker and Noonan
제 1 장. 자료구조와 알고리즘.
Chapter 4 변수 및 바인딩.
U N I X 창원대학교 전자계산학과 김병찬.
Java 3장. 자바의 기본 구조 I : 변수, 자료형, 연산자 public class SumTest {
Signature, Strong Typing
Signature, Strong Typing
최근의 취업률 / 실업률 추이 취업률 실업률 취업자 증가수 JUL % 10 % 100만 명 50 % 5 %
데이터 구조 - 소개 순천향대학교 컴퓨터공학과 하 상 호.
Signature, Strong Typing
Chapter 3 – 프로그래밍 언어 설계 Outline 3.1 설계 기준의 역사적 변천 3.2 효율성
Interactive Data Language
DataScience Lab. 박사과정 김희찬 (화)
제 1장 프로그래밍 언어 소개 1.1 프로그래밍 언어란 무엇인가 1.2 프로그래밍 언어를 배워야 하는 이유
제 2장 언어의 변천 2.1 디지털 컴퓨터 이전의 언어 년대 : 최초의 프로그래밍 언어
Presentation transcript:

제 5장 변수, 바인딩, 식 및 제어문 5.1 변수 5.6 표현식 5.2 바인딩 5.7 조건문 5.3 선언 5.8 반복문 5.4 배정문 5.9 GOTO 문 5.5 상수 및 변수 초기화

5.1 변수 정의 이름, 속성(attribute)의 집합, 참조(reference), 값(value)의 4요소로 구성 <D.W.Barron의 변수 표기법> 값 3.14159 X 이름 속성 실수 참조 정적 바인딩 동적 바인딩 예) X :=3.14159의 의미 ① 이름:X ② 속성 : 원주율, 실수 ③ 참조 : 값이 저장된 위치 ④ 값 : 3.14159

5.2 바인딩 바인딩 (binding) 개념 정의 프로그램의 기본 단위에 이 단위가 택할 수 있는 여러 속성 중에서 일부를 선정하여 결정하는 행위 예) const n = 5; 이름 n에 두개의 속성인 상수와 값 5 바인딩 x := 2; 변수 x에 새로운 속성 값 2가 바인딩

바인딩 시간 바인딩 발생되는 시간 바인딩 시간의 종류 언어 정의 시간 언어 구현 시간 번역 시간 실행 시간

바인딩 시간의 종류 실행 시간 프로그램 실행시간에 발생되는 바인딩 : 동적 바인딩(dynamic binding) 예) 변수값 배정, 변수, 자료구조의 기억장소 할당 모듈의 시작 시간 예) 형식 매개 변수와 실 매개변수의 바인딩 실행 시간의 사용시점 예) 배정문의 값 저장

번역 시간 언어를 번역하는 시점에서 발생되는 바인딩 : 정적 바인딩 (static binding) 예) 변수의 형, 자료 구조형, 크기 언어의 구현 시간 구현 할 때 특성의 일부 확정하는 바인딩 예) 정수 자릿수, 실수의 유효숫자 개수

언어 정의 시간 언어를 정의할 때 확정되는 바인딩 예) 언어 구문 정의 반복문 자료 구조 연산 종류 혼합형 연산 Y := X + 10 에서 발생되는 바인딩 시간?

바인딩 시간의 중요성 언어들 간의 중요하고, 미묘한 차이점은 바인딩 시간의 차이에서 발생 빠른 바인딩은 효율성이 증가하고 늦은 바인딩은 유연성(flexibility)이 증가 바인딩 시간과 언어 구현

주요언어에서 식별자의 바인딩시간 번역 시간 바인딩 (정적 바인딩: static binding) 실행 시간 바인딩 컴파일 시간 (프로그램 작성 시간 포함) (1) Fortran, Algol, PL/I, Pascal, Cobol 등 컴파일러 언어 : 대부분의 변수형 확정 (2) 상수값의 기계 내부 표현이 확정됨 번역 시간 바인딩 (정적 바인딩: static binding) (1) Fortran:COMMON 문에 주어진 이름의 상대 주소 확정 (2) Fortran, Algol, PL/I 등: 부프로그램 이름에 관한 상대 주소 확정 Linkage edit 시간 (1) Fortran, Cobol: 모든 변수의 기억 장소 할당 (2) PL/I: 정적 변수로 선언된 변수의 기억 장소 할당 (3) Algol, Pascal: 전역(global) 변수의 기억 장소 할당 (4) Fortran: DATA 문에서 정의된 값을 변수에 배정 적재 시간 (load time) (1) 실매개 변수를 형식 매개 변수에 연결 ① by value: 실매개 변수값을 지역 변수에 배정 ② by reference: 실매개 변수를 형식매개 변수로 사용할 수 있도록 주소를 배정 ③ by name: 사용할 때 주소와 해당 값을 계산할 수 있는 thunk 루틴의 주소 확정 (2) Algol, Pascal: 지역 변수에 대한 기억 장소 할당(활성 레코드가 만들어짐) (3) PL/I: AUTOMATIC 변수에 대한 기억 장소 할당 실행 시간 바인딩 (동적 바인딩: dynamic binding) 호출 시간 (또는 모듈 시작 시간) 실행 시간 사용 시점 (reference) (1) PL/I: BASED 변수 기억장소(ALLOCATE 문, FREE 문) (2) APL, Lisp, Snobol4: 변수들의 자료형 배정, 기억 장소 할당 (3) 모든 프로그래밍 언어: 배정문 등에서 변수값을 배정

5.3 선언 정의 실행시 사용될 자료의 속성을 언어의 번역기에게 알려주는 프로그램 문장 자료 속성 자료형, 크기, 이름, 생성 시기, 소멸 시기, 참조하기 위한 첨자 등

예 ALGOL의 선언문 integer array x[2:10] Java 의 선언문 Int[] x = new int[9] 생성, 소멸 시기 : 블록 시작과 종료 자료형 : 1차원 배열 원소수 : 9 첨자 범위 : 2 ~ 10 원소 자료형 : 정수 배열 이름 : X 예 ALGOL의 선언문 integer array x[2:10] Java 의 선언문 Int[] x = new int[9]

선언문의 목적 효율적 주기억 장치 사용과 접근 가능 자료 속성 한정 변수, 배열, 레코드 등의 효율적인 접근 : 최적화 주기억 장치의 사용량 감소 실행 시간 감소 효율적 주기억 장치 경영 가능 실행시 보다 효율적 기억 장소 할당 예) ALGOL : stack 인터프리터 언어 : heap allocation Java : stack + heap

정적 형 검사 (static type checking) 가능 형 고정 연산 (type specific operation) : 하드웨어 제공 혼합형 연산 (mixed operation) : 프로그래밍 언어 제공 정적 형 검사로 혼합형 연산을 형 고정 연산으로 변환 : 효율성 추구 선언문의 예 real x; integer y; … x + y;

정적 형 검사 (static type checking) 모든 변수의 자료형 선언 요구 장점 : 실행 시간 효율성 높음 단점 : 자료 생성, 소멸, 내용 변경에 많은 제약 정적 형 검사 언어 : FORTRAN, ALGOL, PL/I 등 동적 형 검사 (dynamic type checking) 선언문 사용 안함 장점 : 프로그래밍 단순화, 적응성 (flexibility) 높음 단점 : 실행 시간 지연, 자료 표현상 효율 저하 복잡한 기억 장소 경영 동적 형 검사 언어 : LISP, APL, SNOBOL4

ALGOL 약간의 효율성 상실하여 실질적 큰 적응성 얻는 선언문 채택 예) ALGOL 68 [1:n] int a; [1:m] int b; 번역 시간 : 효율적 코드 생성 실행 시간 : 첨자 범위 결정 Default 선언은 선언문 간주 (묵시적 선언문) FORTRAN의 정수형, 실수형, 선언문

5.4 배정문 프로그래밍 언어 배정문 구문 C, Java, Fortran Algol, Pascal APL Basic Cobol A = B A := B A B LET A = B MOVE B TO A

l-values와 r-values 배정 연산자의 왼쪽(l-value)과 오른쪽 (r-value)을 의미 예) A := B l-value r-value 값이 저장되는 위치 저장되는 값 (주소, 참조) (수식,변수, 상수 등)

l-value와 r-value 예 자료형 변수 배열 “A[i]” 상수 “3.5” 포인터 “P” r-value 변수의 값 값 3.5 P가 지적하는위치 l-value 변수의 주소 i번째 원소 위치 없음 P가 저장된 위치

Bliss Algol 68 변수 이름 : l-value 뿐임 r-value는 변수 앞에 점(.) 사용 A ← .B + .C B, C의 r-value를 더하여 변수 A (A의 l-value)에 저장 A ← B B의 l-value (B의 주소)를 변수 A에 저장 Algol 68 선언문에서 “ref” 사용하여 l-value 표현 e.g.) ref int x (* 변수 x를 integer 선언 *) int y (* y는 integer 상수로 선언 *) ref ref real z (* 변수 z는 real값이 들어있는 위치에 대한 포인터 *) e.g.) ref int x, y ref ref int z . . . x := y + z + 15 이 경우 변수 x에 배정된 값은 45 * 수식 계산에서 최종 r-value 값을 구하는 dereferencing은 자동 y 10 t 20 z

배정문 A:= expr 에 대한 구현 l-value 중심 배정 ( Fortran, C 등 컴파일러 언어가 사용) “수식 e를 계산하고, A의 속성으로 변환 후 배정” 효율적인 기억장소 경영 - 정적 형 검사 - 빠른 접근 - 효율성 증가 r-value중심 배정 (APL 등 인터프리터 언어가 사용) “수식 e를 계산하고, A의 속성을 e의 계산 결과와 동일한 속성으로 변환 후 배정하는 기법” 동적 형검사 불필요한 변환 없음 적응성(flexibility) 증가

단순 배정문 <목적지_변수> <배정_연산자> <식> A = B = C 다중 목적지 배정문 SUM, TOTAL = 0

조건 목적지 배정문 flag ? count1 : count2 = 0 If (flag) count1 = 0; else count2 = 0; 복합 배정 연산자 a = a + b

단항 배정 연산자 sum = ++ count; count = count + 1; sum = count; sum = count++; sum = count; count = count + 1; count++; count = count +1; - count ++

식으로서의 배정문 while ((ch = getchar()) != EOF ) {…} 혼합형 배정문 int a, b; float c; … c = a/b;

5.5 상수 및 변수 초기화 상수와 초기화(Constant & Initialization) 프로그램이 실행되는 동안 값이 변하지 않는 식별자 상수 개념 제공 : Pascal, Ada, Fortran 상수 허용 시 고려사항 ① 단순 변수 또는 구조 변수(record, array) ② 상수 값 표현 : 수식 가능 여부 ③ 상수 값 배정 시간 (정적, 동적 배정 가능?) ④ predefined constant 제공 여부

배정 연산자와 상수 선언 연산자의 구별(:=, =) Pascal const 사용 숫자, 스트림, 열거형 값 등 허용 (스칼라 형) true, false, maxint 등 제공 const pi = 3.14159; 변수 초기화 제공 안함 Algol68 배정 연산자와 상수 선언 연산자의 구별(:=, =) real root2 := 1.414213 변수 선언과 초기화 real root2 = 1.414213 상수 선언

constant (모든 자료형에 사용 가능) Ada constant (모든 자료형에 사용 가능) X:constant INTEGER :=17; 상수 선언 Y:INTEGER :=17; 변수 선언과 초기화 구조형 자료형의 초기화 type NATURAL is 1 . . N; type ROSTER is array (NATURAL) of INTEGER; LINEUP:ROSTER (1 . . 100); 배열 선언 LINEUP:= ( 1 . . 50 => 1 , 51 . . 100 => -l ); 배열 배정문 LINEUP: ROSTER (1 . . 100) := ( 1 . . 50 => 1 , 51 . . 100 => -l ); 배열 선언과 초기화 LINEUP: constant ROSTER (1 . . 100) := ( 1 . . 50 => 1 , 51 . . 100 => -l ); 상수 선언

Java static final float pi = 3.14; Int [] ia = new int [3]; Int ib [] = { 1,2,3 };

5.6 표현식 수식 (Expression) 목적 : 계산될 값을 기술한 문장 피 연산자(상수, 변수, 함수 등)와 연산자로 구성 참조 투명성(referenctial transparency) : 수식 평가는 환경 변화 없이 값만을 생성 참조 투명성을 보장하기 위해 부작용 제거가 관건

연산 순위 : 연산자 순위(implicit), 괄호 사용(explicit), 결합 법칙 제공 언어에서 제공되는 연산자 순위는 언어에 따라 차이가 남 괄호는 언어 제공의 연산 순위를 변화 시키고자 할 때 사용 결합 법칙은 동 순위 사이에서 발생되며 일반적으로 left-to-right 법칙을 따름 언어의 연산 순위는 BNF로 제공하기도 함 수식의 연산 순위를 표현하기 위해서는 추상 구문 트리를 사용

연산자들의 상대적 우선 순위는 표준화되어 있음 연산자 순위 연산자들의 상대적 우선 순위는 표준화되어 있음 각종 언어에서 연산자 순위는 아래 표에서와 같이 서로 다름 Fortran ** *, / +, - .EQ., .NE., .LT., .LE., .GT., .GE. .NOT. .AND. .OR. PL/1 **, unary +, unary -, ¬ *, / +, - ∥ =, <=, >=, >, < ¬=, ¬<, ¬> ALGOL60 ↑ ×, /, ÷ +, - <,≤,=, ≥, >, ≠ ¬ ∧ ∨ ⊃ ≡ ADA ** ×, /, mod, rem +, -, not(unary) +, -, & =, /=, <, <=, >, >= and, or, xor PASCAL not *, /, div, mod, and +, -, or =, <>, <=, >=, <, > , in

ADA의 수식에 대한 EBNF <expression> ::= <relation>{and<relation>} | <relation>{or<relation>} | <relation>{xor<relation>} <relation> ::= <simpleexpression> [ <relationalop> <simpleexpression> ] <simpleexpression> ::= [ <unaryop> ] <term> { <addop> <term> } <term> ::= <factor> { <mulop> <factor> } <factor> ::= <primary>[<exponenop><primary.] <primary> ::= <literal> | <aggregate> | <name> | <allocator> | <functioncall> | <qualifiedexpression> | (<expression>) <relationalop> ::= = | /= | < | <= | > | >= <addop> ::= +| - | & <unaryop> ::= + | - | not <mulop> ::= * | / | mod | rem <exponenop> ::= **

수식 : not A ** B * C / D > - E + F and G mod H >= I ADA의 임의 수식 parse tree 예 수식 : not A ** B * C / D > - E + F and G mod H >= I

적용순서 (applicative order) operand1 op operand2 평가 순서는 operand1, operand2를 계산한 후 연산자 op를 적용 단, 논리 연산에서는 이 적용 순서를 바꿀 수 있는 특성이 있음 예) (1) x ≠ 0 or y / x < 1 (2) x ≠ 0 and y / x < 1 (1)의 경우 : x가 0이 아니면 무조건 참 (2)의 경우 : x가 0이면 무조건 거짓, 더구나 x 값이 0일때는 값이 거짓으로 결과가 존재하나, 위의 적용 순서를 따르면 y / x에서 overflow 발생 이 두 경우에서 or와 and의 뒷부분을 연산하지 않기 위해 새로운 연산자 단회로 도입

: 부울 수싯에서 일부 피연산자만으로 평가하는 기법 단회로(short circuit) : 부울 수싯에서 일부 피연산자만으로 평가하는 기법 x cand y = if x then y else false x cor y = if x then true else y ADA - and then, or else 사용

5.7 조건문 조건문 (Conditional Statements) FORTRAN Alogol IF (BCOND) L1 , L2 IF (BCOND) <STMT> IF (ACOND) L1 , L2 , L3 GOTO문 요구 판독성 저하 Alogol if cond then S1 else S2 Fortran 77에서는 dangling else의 해결로 ENDIF 사용 택일문 처리, dangling else

다수의 endif 사용을 줄이고 판독성을 증가시키기 위해 새 구문 형태 도입 if C1 then S1 else if C2 then S2 ........ else if Cn then Sn else Sn+1 end if 다수의 endif 사용을 줄이고 판독성을 증가시키기 위해 새 구문 형태 도입 예) Algol 68의 elif(최초 시도), Ada의 elsif if C1 then S1 elsif C2 then S2 elsif C3 then S3 . . . . . . . . . . . elsif Cn then Sn else Sn+1 endif;

CASE 문 If-then-else를 확장한 택일문 Algol-w (Hoare, With) Pascal Algol-w(Hoare, Wirth) case <integer expression > of begin S1;S2;. . .;Sn end <integer expression > : (1 ~ n) 정수 임의 i 이면 Si 실행 열거형 도입 <case label list>는 <expr>의 상수 Pascal case < expr > of <case label list>:<stmt> ... end

Pascal case문 사용 예 case thismonth of 다음 문장이 정의되었다고 가정 type months = (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec); var thismonth : months; case thismonth of Feb, Apr, Jun, Jul, Aug : birthday := 4; Sep : birthday := 1; Jan, Mar, May, Oct, Nov, Dec :birthday := 0; end;

Ada others절 도입 열거형과 부분 범위(range) 형 예 case thismonth is when Feb|Apr|Jun..Aug ⇒ birthday := 4; when Sep ⇒ birthday := 1; when others ⇒ birthday := 0; endcase;

CASE 문 고려 사항 선택자 수식으로 허용된 자료형은 무엇인가? case 레이블에 허용되는 자료형은 무엇인가? case 문의 내부 또는 외부로부터 case 레이블로 분기될 수 있는가? 레이블간의 상호배제가 요구하는가? 레이블간의 상호 배제가 요구되지 않은 경우, 실행을 중복하는가? 수식으로부터 발생되는 모든 경우들을 처리해야 하는가?

5.8 반복문 반복문 (Iterative Statements) 반복 수행 - 컴퓨터 중요 특성, 초기언어부터 사용 <loop-until 예> loop if not <조건> then exit <statement> repeat

종류 ① 가장 간결한 형태 (괄호 사용 개념) loop-repeat 문 (구현 예) 탈출 방법(조건/무조건 분기문 이용) goto(비구조적) -> exit(제한적 goto) Bliss-10 (다양한 exit 제공) - exit, exitblock, exitcase, exitcommand, exitselect, exitloop, exitset 사용 Bliss II (label을 사용하므로써 중첩된 scope을 한번에 탈출 가능) - exit<label> : label은 scope 이름 반복문 몸체, 복합문, case 문 등

② while 문 - 시작 부분에서 반복 조건 검사 (0번 이상 반복 가능) ③ repeat-until 문 - 마지막 부분에서 반복조건 검사 (1번 이상 반복 가능) while <bcond> do <statement> end loop if not <bcond> then exit repeat <loop-repeat로 표현> repeat <statement> until <bcond> loop if not <bcond> then exit <loop-repeat로 표현>

④ 반복 제어 변수 사용 반복문 (화려한 역사를 갖음) 예) Fortran의 DO문, Pascal, C, Ada, Algol 등등의 for 문 for 문에서 고려할 점 - 반복 변수가 택할 수 있는 값들의 자료형은? - 초기값, 최종값, 증분값에 수식의 허용여부와 수식 결과의 자료형은? - 반복시 최종값과 증분값은 얼마나 자주 평가되는가? - 반복 변수와 최종값은 언제 비교되나? - 반복문 내에서 배정문으로 반복 변수가 변경될 수 있나? - 반복문 종료후 반복 변수가 갖는 값은? - 반복문 내외로 제어 이동이 허용되나? - 반복 변수의 영역(scope)은?

Algol60 (Algol60 보고서 내용) - 반복 변수와 최종값 먼저 비교 - 초기값, 최종값, 증분값(임의 수식) - 자료형 : 실수형, 정수형, 혼합형 연산 허용 - 최종값, 증분값은 비교시 매번 재평가 - 보고서의 설명 예 a step b until c v := a L1 : if (v - c) * sign(b) > 0 then goto exit ; <statements> v := v + b goto L1; exit : - 반복문 정상 종료시 반복 변수 값 정의되지 않음 - goto문 탈출시 반복 변수 값 유지 - for 문 내부로 제어 이동시 결과 미정의 for <var> :=<init> step <incr> until <final> do <stmt>

Pascal 변수의 초기, 최종값은 동일 자료형(스칼라형, 실수형 제외) 초기, 최종값은 시작전 한번만 계산 변수와 최종값 비교 먼저 종료후 반복 변수의 값 미정의 반복문 변수 열거형 사용 증분값 : to, downto Pascal의 for문 구문 for <var> :=<init> to <final> do <stmt> 또는 for <var> :=<init> downto <final> do <stmt>

Fortran II의 DO문 (최초의 반복문) 초기값, 증분값, 최종값 : 정수형 상수나 변수 반복문 수행후 반복 변수의 값 무 언급 Algol 68의 for문 E1, E2, E3 : 정수 수식, 한번만 평가 (Algol 60은 임의 수식, 매번 평가) 반복 변수 영역 : 몸체부 국한 (Ada도 동일) Algol 68의 for문 구문 [ for <var> ][ from <E1>][ by <E2>][ to <E3>] [while <E4>] do <S> od

5.9 GOTO 문 GOTO 문 레이블 제어 모든 문장을 지칭 기계어 특성 그대로 표현 (효율적 실행 보장) 사용 편리 (타 제어문 없이 모든 알고리즘 표현 가능)

Algol (비지역 레이블, 형식 매개변수 참조) 레이블 사용에 따른 분류 레이블을 태그로만 사용 (번역시) 레이블 기계어 코드의 분기 위치로 번역 (Fortran, Basic) 레이블을 제한된 자료 항목으로 간주 (레이블 값을 읽거나 계산하지 못함) 레이블 변수, 배열, 매개변수, 비지역 참조등 Algol (비지역 레이블, 형식 매개변수 참조) 일반 자료 항목으로 간주 (Snobol4, APL) READ X ... GOTO X

GOTO 문의 장단점 장점 GOTO문 제어구조를 하드웨어가 제공 GOTO문 제어구조의 완벽한 범용성 (모든 알고리즘 표현 가능, 타 순서 제어문은 편의 제공 일뿐) 단점 프로그램 질 저하 유도 판독성 저하 (비 구조적) 프로그램 유지 보수의 난해성

Goto문의 잔존상 여부 : 논란의 대상 Fortranm Basic의 if문은 goto 문임 Pure LISP, Bliss : goto 문 사용 금지 Pascal : 제한적 사용 Goto문 제거 - 다양한 순서 제어문 요구 (택일문, 반복문, 되부름 등)

Structured Programming (구조적 프로그래밍) 계층 구조 강조 (복합문, 조건문, 반복문) 계층 구조와 프로그램 본문 일치 모듈화

비 구조화된 프로그램 PROCEDURE DIVISION. PROGRAM-SUMMARY. OPEN INPUT EMPL-FILE OUT PRINT-FILE. PRINT-HEADINGS. WRITE PRINT-LINE FROM HEADER1 AFTER ADVANCING PAGE. … PROCESS-A-RECORD. IF MALE MOVE SALARY-IN TO MEN-SAL-OUT. PRINT-SUMMARY. MOVE ‘ TOTAL’ TO NAME-OUT CLOSE EMPL-FILE PRINT-FILE. STOP RUN.

구조화된 프로그램 PROCEDURE DIVISION. PROGRAM-SUMMARY. OPEN INPUT EMPL-FILE OUT PRINT-FILE. PERFORM PRINT-HEADINGS. PERFORM READ-EMPL-RECORD. … CLOSE EMPL-FILE PRINT-FILE. STOP-RUN. PRINT-HEADINGS. WRITE PRINT-LINE FROM HEADER1 AFTER ADVANCING PAGE. PROCESS-A-RECORD. IF MALE MOVE SALARY-IN TO MEN-SAL-OUT. ...