프로그래밍언어론 8화를 듣고 배운내용
변수의 영역(scope)
변수를 사용할 수 있는 범위
변수에 값을 입력하거나, 읽어올 수 있는 범위
영역의 시작: 변수 선언
수명의 시작
- 동적 바인딩 => 변수 선언
- 정적 바인딩 => 프로그램 수행 시작
블록(Block)
영역을 구분해주는 단위
블록안에서 변수 선언 가능
=> 영역의 끝은 블록이 끝나는 곳
블록 표연이나 적용 기준은 언어별로 다르다
지역변수
블록 안에 선언된 변수
비지역변수
블록 밖에서 선언되고, 블록 안에서도 사용할 수 있는 변수
참조 환경
한 위치에서 사용할 수 이는 모든 변수의 모음
해당 위치에 모든 지역변수, 비지역변수
영역 규칙
정젹 영역 규칙, 동적 영역 규칙
자유변수
현재 블록에서 선언되지 않고 사용하려는 변수
비지역변수거나 오류일 수 있다.
영역 규칙에 따라 참조 위치 결정
정적 영역 규칙
블록들의 정적 내포 관계 이용
정적 내포 관계: 문맥적 포함 관계
용어
정적 조상: 현 블록을 문맥적으로 포함하는 모든 블록
정적 부모: 현 블록에서 가장 가까운 정적 조상
사용될 때
- 변수가 나왔을 때 현재 블록안에 선언이 되었는지 확인 => 있으면 지역변수
- 자유변수라면 정적 부모에 선언이 있는지 확인 => 있으면 비지역변수
없으면 그 위의 정적 부모에 대해 반복 - 제일 외곽 영역까지 선언을 찾지 못했다 => 오류
동적 영역 규칙
동적 내포 관계 이용: 서브프로그램의 호출 관계
프로그램 수행 시점에만 판단 가능
사용될 때
정적 영역 규칙이랑 같다
=> 대부분 정적 영역 규칙 이용한다.
이름 공간
전역변수
어떤 블록에도 포함되지 않는 곳에 선언된 변수
영역: 프로그램 전체
모든 영역에서 비지역 변수
이름 구멍
비지역 변수와 지역변수가 같은 변수 이름을 사용할 때
영역 구멍에서 전역변수 사용하려면
영역 연산자 이용할 수 있다.
예) C++ 영역 연산자 : : 를 이용해서 바깥 전역 변수를 사용할 수 있다.
이름 공간
관련 있는 변수와 함수를 하나로 묶어서 사용
영역 자체의 이름을 사용(JavaScript 오브젝트 같은 느낌인가?)
'Computer Science > Programming :: 프로그래밍언어론' 카테고리의 다른 글
프로그래밍언어론 강의 9화 :: 타입, 원시타입, 사용자정의타입, 복합타입 (0) | 2021.10.19 |
---|---|
프로그래밍언어론 강의 7화 :: 변수, 바인딩 (0) | 2021.10.12 |
프로그래밍언어론 강의 6화 :: 언어 구현, 인터프리터, 컴파일러 (0) | 2021.09.28 |
프로그래밍언어론 강의 5화 :: 구문 분석 (0) | 2021.09.11 |
프로그래밍언어론 강의 4화 :: 구문론과 의미론 (0) | 2021.09.09 |