제어 흐름
- 프로그래밍 언어에는 여러 종류의 제어 흐름이 있다.
- 순차(Sequence)
- 조건문(conditional)
- 반복문(Iteration)
순차 제어문
- 순차 및 복합:
- 종종 ";"으로 표시되는 명령문의 순서
- S1; S2 → S1이 종료된 직후 S2의 실행이 시작된다.
- 일련의 명령문을 복합 명령문으로 그룹화할 수 있다.
- 일반적으로 { } 코드 블록을 사용한다.
- 종종 ";"으로 표시되는 명령문의 순서
Goto
- 어셈블리 언어의 점프 명령어와 유사하다.
- goto Label
- 즉시 라벨로 이동한다.
- 주의 깊게 사용하지 않으면 "스파게티 코드"가 쉽게 생성된다.
스파게티 코드
- goto 문이 코드의 임의 위치로 점프하는 경우, 프로그램의 실행을 추적하는 것은 매우 어렵다.
- 점프로 이루어진 연결을 표현하면,접시에 얽힌 스파게티처럼 보일 수도 있습니다.

Goto의 죽음
- 현대 언어에서는 goto 문이 더 이상 인기가 없다.
- 또한 꼭 필요한 경우가 아니면 goto 문을 사용하지 않는 것이 좋다.
- 대부분의 동작은 return, break, continue와 같은 제한된 방식의 다른 문에 의해 지원될 수 있다.
조건문(conditional)
- 주어진 부울 표현식을 평가하고 해당 값을 기반으로 명령문을 실행한다.
- 조건문 형태
- if <bool_expr> then C1 else C2
- 중첩된 if 문을 처리
- if <bool_expr> then C1 else C2 endif
- if <bool_expr1> then C1
else if <bool_expr2> then C2
....
else Cn
- Case 문(또는 switch-case 문):
- 다양한 분기를 처리한다.
- <expr> 표현식을 계산하여 분기를 결정할 수 있는 경우에 사용된다.
- 각 <label>은 상수 값을 나타낸다.
- 분기가 많은 경우 if-else 문보다 효율적이다.
- switch(<expr>) {
case <label1>:
S1;
break;
case <label2>:
S2;
break;
....
}
Case의 구현
- 점프 테이블을 사용하여 Case 문을 구현할 수 있다.
- 점프 테이블에는 각 분기에 대한 점프 명령이 포함되어 있다.
- <expr> 값을 평가한 후 점프 테이블에 대한 오프셋을 얻을 수 있다.

- 점프 종료(break)가 없으면 다음 단계까지 실행이 계속된다.
- 이 구현에서는 레이블 상수 범위가 넓은 경우 큰 점프 테이블이 필요하다.
- 예) 0과 1000의 두 가지 경우.
- 점프 테이블에는 사용되지 않지만 1~999가 있어야 한다.
- 해싱 등 다양한 방법으로 점프 주소를 계산할 수 있다.
반복문(Iterations)
- 반복문은 두 가지 주요 범주로 구분될 수 있다.
- 무제한 반복 : while 문으로 구현되는 경우가 많다.
- 제한된 반복 : for 문으로 구현되는 경우가 많다.
- 반복을 사용하면 언어가 튜링 완전해질 수 있도록 표현식이 제공된다.
- 이 언어로 모든 계산 가능한 알고리즘을 작성할 수 있다.
무제한 반복
- 무제한 반복은 두 부분으로 구현된다.
- 루프 조건, 루프 본문
- while <bool_expr> ← 조건
do
<statement> ← 바디
- 조건이 만족되는 동안(true) 본문 실행을 반복한다.
제한된 반복
- 제한된 반복은 보다 복잡한 구성요소로 구현된다.
- for i = <start> to <end> by step
do
<statement> ← 바디
- for i = <start> to <end> by step
- 일반적으로 인덱스, 카운터 또는 제어 변수라고 하는 변수가 있다.
- 그런 다음 0이 아닌 정수 상수인 변수를 단계적으로 수정한다.
- <start>와 <end>는 범위에 대한 표현식이다.
무제한 vs 제한
- "순수한" 제한된 반복문을 많이 볼 수 없다.
- 제한된 반복의 경우 반복 시작 시 반복 횟수를 알 수 있다.
- 무제한 반복의 경우에는 해당되지 않는다.
- 예) C에서 for 문은 순수 경계 반복이 아니다.
- for (int i=0; i<n; i++) {
...
n += 1;
}
- for (int i=0; i<n; i++) {
'프로그래밍언어론' 카테고리의 다른 글
[프로그래밍언어론] 23. 파이썬 피보나치 수열 재귀 (0) | 2023.10.12 |
---|---|
[프로그래밍언어론] 22. 재귀(Recursion) (0) | 2023.10.12 |
[프로그래밍언어론] 20. 명령문(Statements) (0) | 2023.10.11 |
[프로그래밍언어론] 19. 표현식(Expression) (0) | 2023.10.11 |
[프로그래밍언어론] 18. 파이썬으로 CRT 구현 (0) | 2023.10.11 |
제어 흐름
- 프로그래밍 언어에는 여러 종류의 제어 흐름이 있다.
- 순차(Sequence)
- 조건문(conditional)
- 반복문(Iteration)
순차 제어문
- 순차 및 복합:
- 종종 ";"으로 표시되는 명령문의 순서
- S1; S2 → S1이 종료된 직후 S2의 실행이 시작된다.
- 일련의 명령문을 복합 명령문으로 그룹화할 수 있다.
- 일반적으로 { } 코드 블록을 사용한다.
- 종종 ";"으로 표시되는 명령문의 순서
Goto
- 어셈블리 언어의 점프 명령어와 유사하다.
- goto Label
- 즉시 라벨로 이동한다.
- 주의 깊게 사용하지 않으면 "스파게티 코드"가 쉽게 생성된다.
스파게티 코드
- goto 문이 코드의 임의 위치로 점프하는 경우, 프로그램의 실행을 추적하는 것은 매우 어렵다.
- 점프로 이루어진 연결을 표현하면,접시에 얽힌 스파게티처럼 보일 수도 있습니다.

Goto의 죽음
- 현대 언어에서는 goto 문이 더 이상 인기가 없다.
- 또한 꼭 필요한 경우가 아니면 goto 문을 사용하지 않는 것이 좋다.
- 대부분의 동작은 return, break, continue와 같은 제한된 방식의 다른 문에 의해 지원될 수 있다.
조건문(conditional)
- 주어진 부울 표현식을 평가하고 해당 값을 기반으로 명령문을 실행한다.
- 조건문 형태
- if <bool_expr> then C1 else C2
- 중첩된 if 문을 처리
- if <bool_expr> then C1 else C2 endif
- if <bool_expr1> then C1
else if <bool_expr2> then C2
....
else Cn
- Case 문(또는 switch-case 문):
- 다양한 분기를 처리한다.
- <expr> 표현식을 계산하여 분기를 결정할 수 있는 경우에 사용된다.
- 각 <label>은 상수 값을 나타낸다.
- 분기가 많은 경우 if-else 문보다 효율적이다.
- switch(<expr>) {
case <label1>:
S1;
break;
case <label2>:
S2;
break;
....
}
Case의 구현
- 점프 테이블을 사용하여 Case 문을 구현할 수 있다.
- 점프 테이블에는 각 분기에 대한 점프 명령이 포함되어 있다.
- <expr> 값을 평가한 후 점프 테이블에 대한 오프셋을 얻을 수 있다.

- 점프 종료(break)가 없으면 다음 단계까지 실행이 계속된다.
- 이 구현에서는 레이블 상수 범위가 넓은 경우 큰 점프 테이블이 필요하다.
- 예) 0과 1000의 두 가지 경우.
- 점프 테이블에는 사용되지 않지만 1~999가 있어야 한다.
- 해싱 등 다양한 방법으로 점프 주소를 계산할 수 있다.
반복문(Iterations)
- 반복문은 두 가지 주요 범주로 구분될 수 있다.
- 무제한 반복 : while 문으로 구현되는 경우가 많다.
- 제한된 반복 : for 문으로 구현되는 경우가 많다.
- 반복을 사용하면 언어가 튜링 완전해질 수 있도록 표현식이 제공된다.
- 이 언어로 모든 계산 가능한 알고리즘을 작성할 수 있다.
무제한 반복
- 무제한 반복은 두 부분으로 구현된다.
- 루프 조건, 루프 본문
- while <bool_expr> ← 조건
do
<statement> ← 바디
- 조건이 만족되는 동안(true) 본문 실행을 반복한다.
제한된 반복
- 제한된 반복은 보다 복잡한 구성요소로 구현된다.
- for i = <start> to <end> by step
do
<statement> ← 바디
- for i = <start> to <end> by step
- 일반적으로 인덱스, 카운터 또는 제어 변수라고 하는 변수가 있다.
- 그런 다음 0이 아닌 정수 상수인 변수를 단계적으로 수정한다.
- <start>와 <end>는 범위에 대한 표현식이다.
무제한 vs 제한
- "순수한" 제한된 반복문을 많이 볼 수 없다.
- 제한된 반복의 경우 반복 시작 시 반복 횟수를 알 수 있다.
- 무제한 반복의 경우에는 해당되지 않는다.
- 예) C에서 for 문은 순수 경계 반복이 아니다.
- for (int i=0; i<n; i++) {
...
n += 1;
}
- for (int i=0; i<n; i++) {
'프로그래밍언어론' 카테고리의 다른 글
[프로그래밍언어론] 23. 파이썬 피보나치 수열 재귀 (0) | 2023.10.12 |
---|---|
[프로그래밍언어론] 22. 재귀(Recursion) (0) | 2023.10.12 |
[프로그래밍언어론] 20. 명령문(Statements) (0) | 2023.10.11 |
[프로그래밍언어론] 19. 표현식(Expression) (0) | 2023.10.11 |
[프로그래밍언어론] 18. 파이썬으로 CRT 구현 (0) | 2023.10.11 |