<Algol 60>
- 컴파일러 언어
- 1950년대 후반 등장
- 알고리즘 기술, 범용
- 양식의 자유화(free format) , 구조적 명령문 , begin-end 블록 , 변수 타입 선언 , 되부름 , call-by-value 매개변수 등의 개념
- 스택 기반 실행 환경 도입
- BNF 최초 사용
- 블록 구조 제공으로 알고리즘 작성 용이 목적 (블록구조, 재귀적 용법)
- 효율성보다 일반적인 원칙을 중시하기 시작했다
- 번역기 구현이 어렵고, 번역 수행 알고리즘이 충분히 이해되지 않아 언어가 성공하지 못함
조건문에서의 현수 문제 해결 (dangling)
중첩문
if c1 then begin if c2 then S1 else S2 end
if c1 then begin if c2 then S1 end else S2
바인딩
- 정적 바인딩 의 컴파일 시간 => 대부분의 변수형 확정
- 정적 바인딩 의 Linkage edit 시간 => 부 프로그램 이름에 관한 상대 주소 확정
- 정적 바인딩 의 적재 시간 => 전역(global) 변수의 기억 장소 할당
- 동적 바인딩 의 호출 시간 (또는 모듈 시작 시간) => 지역 변수에 대한 기억 장소 할당 (활성 레코드가 만들어짐)
- 동적 바인딩 의 실행 시간 사용 시점 => 배정문 등에서 변수값을 배정
정적 형 검사 (static type checking)
약간의 효율성을 상실하여 실질적인 큰 유연성을 얻은 선언문 채택
ex) 배열 real array x[m1:n1, m2:n2]
배정 연산자 : A := B
표현식
↑
x , / , ÷
+ , -
< , ≤ , = , ≥ , ≠
¬
^
V
⊃
≡
조건문
if cond then S1 else S2
반복문
for문 -> 반복 제어 변수 반복문
반복 변수와 최종값 먼저 비교
초기값, 최종값, 증분값 (임의 수식)
자료형 : 실수형, 정수형, 혼합형 연산 가능
최종값, 증분값은 비교시 매번 재평가
a step b unti c
v := a
L1 : if (v - c) * sign(b) > 0 then goto exit;
<statements>
v := v + b;
goto L1;
exit;
반복문 정상 종료 시 반복 변수 값 정의되지 않음
goto문 탈출 시 반복 변수 값 유지
for 문 내부로 제어 이동시 결과 미정의 -> 컴파일러 구현하는 사람이 결정
배열
-> 상한/하한값 표현 시 정수 수식
배열 연산
- 배열 원소에 대한 연산만 가능 ( 배정, 복사 x)
<Algol 68>
- 컴파일러 언어
- Algol 60 + 타 언어의 여러 기능 + 표현력 있고 일관된 구조
- 새로운 특성 독자 개발
- 이론적으로 일관성 갖는 구조
- 일반적인 형 시스템, 직교성 강조 (수식 위주)
- 언어 기술 -> 새로운 용어 과다 사용
- 디자인 일관성, 파일 시스템, 실행 환경 -> 우수
- 범용 컴퓨터 사용 불가능 (비판 -> 소수 구현)
- 일반성 , 직교성 제공으로 언어의 복잡성 감소
- 매개변수 전달 방식 : Call by value, 객체에 대한 포인터를 값으로 전달 가능
- 간결성을 보장 못함
- type 대신 mode를 사용 => 표준화된 표기를 잘 따르지 않는다
- 신뢰성을 강조하기 시작하면서 통합 컴파일러로 변모
조건문에서의 현수 문제 해결 (dangling)
중첩문
if c1 then if c2 then S1 else S2 fi fi
if c1 then if c2 then S1 fi else S2 fi
바인딩
- 정적 바인딩 의 컴파일 시간 => 대부분의 변수형 확정
- 정적 바인딩 의 Linkage edit 시간 => 부 프로그램 이름에 관한 상대 주소 확정
- 정적 바인딩 의 적재 시간 => 전역(global) 변수의 기억 장소 할당
- 동적 바인딩 의 호출 시간 (또는 모듈 시작 시간) => 지역 변수에 대한 기억 장소 할당 (활성 레코드가 만들어짐)
- 동적 바인딩 의 실행 시간 사용 시점 => 배정문 등에서 변수값을 배정
정적 형 검사 (static type checking)
약간의 효율성을 상실하여 실질적인 큰 유연성을 얻은 선언문 채택
ex) 배열 real array x[m1:n1, m2:n2]
배정 연산자 : A := B
선언문에서 "ref" 사용하여 l-value 표시
ex) ref int x (변수 x 를 integer 선언 )
ref ref real z (변수 z는 real 값이 들어있는 위치에 대한 포인터)
배정 연산자와 상수 선언 연산자를 구별
- 배정 연산자 :=
- 상수 선언 연산자 =
조건문
- elif 최초 시도 하였다
반복문
for문 -> 반복 제어 변수 반복문
Exp1, Exp2 , Exp3 (초기값, 증분값, 최종값) : 정수 수식, 한 번만 평가 (Algol 60은 임의 수식, 매번 평가)
반복 변수 영역: 몸체부 국한
[for <vble>] [from <Exp1>][by <Exp2>][to <Exp3>]
[while <Exp4>] do <8> od
배열 선언
[1:3] ref [] real w
-> 실수형 배열을 가리키는 3원소 배열
[1:a] real x
[1:b] real y
[1:c] real z
-> w[1] := x , w[2] := y , w[3] := z
배열 연산
- 배열 원소에 대한 연산 + 배열 배정연산 (복사는 안돼)
- A <- B , A = B , A:= B
자료형
- 사용자 정의 자료형
- 강력한 자료형 요구
- 동치, 적법성 등에 문제점을 내포
<Algol-w>
조건문의 case문
case <integer expression> of
begin
S1; S2; S3; ... ; Sn
end
자료형
- 사용자 정의 자료형
- 강력한 자료형 요구
- 동치, 적법성 등에 문제점을 내포
'CS(Computer Science) > 프로그래밍언어' 카테고리의 다른 글
9. 기억장소 배당 (3) | 2023.06.03 |
---|---|
8. 영역과 수명 (0) | 2023.06.03 |
1. Fortran (0) | 2023.04.19 |
4. 프로그래밍 언어 구문과 구현 기법 (0) | 2023.04.07 |
3. 프로그래밍 언어 설계 시 주의점 (0) | 2023.04.07 |