Control Statements
60년대에 알고리즘은 “Sequential / two-way selection / pretest logical loop 로 표현 가능하다.”라고 했다.
어셈블리어 예시
Conditional (BEQ, BNE 등) Ex) 500 BEQ R2, R4 2000 / R2, R4가 같으면 500에서 2000으로 이동
Unconditional (JMP 등) Ex) 500 JMP 10000 / Unconditional하게 10000으로 이동
Control Structure
컨트롤 명령어(if, while 등)와 그 명령어에 의해서 제어되는 명령어들의 집합
(control statement + statement whose execution it controls)
구조적 프로그래밍
goto 문을 사용하지 않고 시작과 끝 지점이 일정한 구조적 구문 사용
어떤 계산 함수든 순차, 선택(if, switch), 반복(while, for)의 3가지 제어 구조로 표현 가능
Selection Statements
Two-way에서 Multiple-way로 발전
Two-way Selection Statements
=> if <control_expression> then <clause> else <clause>
=> then 예약어는 이제는 괄호{ }로 대체됨

Multiple-way Selection Statements
- control expression의 형태와 타입은?
- 선택 가능한 segments는 어떻게 지정되는가?
- 구조의 실행 흐름이 단 하나의 선택 가능한 segment로 제한되는가? 아니면 여러 개가 가능한가?
- case value(case 안에 들어가는 값)는 어떻게 지정되는가?
- 선택 가능한 segment가 없는 경우 어떻게 처리할 것인가? (default 혹은 else 등)
C언어의 switch 문
- control expression은 오직 integer type만 가능
- 선택 가능한 segment는 statement sequences / blocks / compound statements
- 구조에서 하나가 실행이 되고 break;가 없으면 다른 것도 실행이 가능. (implicit branch가 없다.)
- unrepresented values를 위해 default clause를 사용한다.
Multiple Selector의 구현
- 다중 조건 분기 (Multiple conditional branches) (if else 안에 if else를 계속 넣는 방식)
- 테이블에 case value 값을 저장한 뒤, 선형 탐색을 사용
- case가 10개 이상이면 hash table을 이용할 수 있음
- case가 적고 전체 case value의 절반 이상이 표현된다면, case label이 case value인 array를 사용할 수 있음
Iterative Statements
iteration control을 어떻게 할 것인가? - 루프를 돌지, 나갈지 등 (1. Counter로 미리 정함 / 2. Logical 판단)
control하는 부분을 loop의 어디에 위치시킬 것인가? (루프의 시작, 루프의 끝, 루프의 중간 등)
Counter-Controlled Loops (C의 for문)
loop variable을 가진다. -> 초기 값(initial) / 끝나는 값(terminal) / step size
- loop variable의 type과 scope는 어떻게 할 것인가?
- loop variable을 loop control 문 안쪽이 아닌 loop body에서도 변경할 수 있게 할 것인가?
- loop variable 값의 판단은 언제 할 것인가? (Ex : initial은 처음에 한 번, 나머지는 계속 판단 등등)

Logically-Controlled Loops (C의 while문)
Boolean expression을 기반으로 반복 제어를 한다.

User-Located Loop Control

User-Defined Data Structure를 이용한 Iteration
주로 User-Defined Data Structure를 이용해 User-Defined Function을 실행한다. (Iterator라고 부름)
(링크드 리스트를 이용하여 노드를 순회하면서 어떤 함수를 실행한다.)
C : ( for (p=root; p==NULL; trans(p)){...} )
Java : ‘foreach’를 Iterable 인터페이스를 구현한 배열이나 클래스에 사용한다. ( for (String Mys : Mylist) {...} )
Unconditional Branching
대표적으로 goto. => 장점은 Flexibility와 Writability가 올라간다. Readability와 Reliability는 떨어진다.
Guarded Commands
=> Verification이 함께 이루어지는 문법
하나도 선택되지 않아서 발생하는 에러는 생기지 않는다.
Selection
- 일반적으로는 여러 개 중에 하나를 선택, Guarded는 여러 개 중에 여러 개를 선택 가능
- 모든 Boolean Expr를 평가 후, True인 것 중에 무작위로 실행이 된다. 만약 모두 False라면 runtime error 발생
Loop
- 모든 Boolean Expr를 평가 후, True인 것 중에 무작위로 실행이 된다. 만약 모두 False라면 exit loop

'Programming Languages [PL]' 카테고리의 다른 글
[PL] 09. Implementing Subprograms (1) | 2024.01.10 |
---|---|
[PL] 08. Subprograms (1) | 2024.01.10 |
[PL] 06. Expressions and Assignment Statements (1) | 2024.01.10 |
[PL] 05. Data Types (1) | 2024.01.10 |
[PL] 04. Names, Bindings, and Scopes (3) | 2024.01.09 |