CS/Introduction of Coumputer Science

Semantic Analyzer: Scope

WakaraNai 2022. 11. 19. 18:29
728x90
반응형

scope

변수가 효력을 가지는 범위

= 대입 연산자를 사용하면 이전에 사용한 변수에 새로운 값을 할당하기에 충돌하지 않는다

 

definetion  governs the binding for that

 

 

block

definitions을 감싸는 것. scope을 그 안으로 제한함

block 밖에 효력을 못 미치기 때문에 이 경우 minus되었다고 표현

ML: let... in.. end , func .... 

 

 

 

Python과 자바의 Scope Rule

Python은 LGB rule: local, global, builtin

자바는  파이썬과 다르게 변수의 선언과 생성을 구분한다.

그래서 왼쪽의 파이썬 코드는 x = 3을 하였을 때 이전의 x 변수를 찾아낼 수 있지만

자바에서 int를 써서 새로 선언한 경우 이전의 x 변수를 찾아낼 수 없다 

 

다만 파이썬은 functional local에 대해서는 구분 짓기에 맨 오른쪽같은 경우도 있다

 

Nampespace

이름을 가진 블록을 사용자가 생성할 수 있다.

이를 통해 외부에서 그 안의 값들에 접근할 수 있다.

- c++ : namespace

- Modula-3 module

- Ada package

- Java package

 

 

자바는 클래스 이름 자체가 바로 네임스페이스의 예시

클래스이름.필드이름 이런 식으로 값에 접근 가능

public class Month {
    public static int min = 1;
    public static int max = 12;
    …
}
// Month.min
// Month.max

 

ML의 경우 struct를 이용

 

Namespace Refinement

visibility를 제한할 수 있다.

public == interface

not public하고 싶을 땐 namespace

(자바 작동 방식과 유사)

 

 

Primitive Namespace

변수의 타입을 명시해두면 변수의 이름과 타입을 컴퓨터가 구분할 수 있다

 

 

 

!! Dynamic Scoping

static은 코드만 보고도 알 수 있지만 Dynamic은 runtime 때에만 알 수 있다

그래서 클래스나 함수 자체의 선언은 static scoping이다

 

 

 

python은 dynamic scoping을 쓰진 않지만... 이를 한다고 했다면...

호출하는 단위의 순서로 scoping이 일어난다.

728x90
반응형

'CS > Introduction of Coumputer Science' 카테고리의 다른 글

Computer Security & AI  (0) 2022.11.25
Big Data  (0) 2022.11.15
Network and Wireless  (0) 2022.11.15
Quantum Computing  (0) 2022.11.11
Computer Vision  (0) 2022.11.11