본문 바로가기

23년 1학기 학교공부/프로그래밍언어개론

[PL] Identifier와 Scope

목차

    728x90
    반응형
    SMALL

    📁 Identifiers(식별자)

    📌 Identifiers(식별자) 프로그램의 어떤 요소와 연관된 이름을 말한다.

    • 함수 이름(함수와 연관)
    • 변수 이름(값과 연관)
    • 파라메터 이름(인자값과 연관)
    • 필드 이름(필드값과 연관)
    • 메소드 이름(메소드와 연관)
    • 클래스 이름(클래스와 연관)

     

    하나의 identifiers는 프로그램 내에 여러번 등장할 수 있다.

     

     

     

    📁 Occurrences

    📌 Binding occurrence : identifier 정의를 위해 등장한다. 예를 들면 변수 정의가 있다.

    📌 Bound occurrence : identifier와 연관된 요소 사용을 위해 등장한다. 예를 들면 변수에 저장된 값을 사용하는 경우가 있다.

    📌 Free identifier : Binding 및 Bound occurrence에 해당되지 않는 identifier이다. 예를 들면 정의되지 않은 변수에 접근하는 경우가 있다.

     

    line 1: let _ = f 0
    line 2: let f x = 
    line 3:     let y = 1 in
    line 4:     x + y
    line 5: let _ = f 1
    line 6: let _ = x - z

    예를 들면 위 코드에서 identifier는 f, x, y, z가 있다.

     

    Binding occurrences는

    • line 2. f
    • line 2. x
    • line 3. y

    line 2의 f는 3, 4줄에 걸친 함수를 정의하고 있고,

    line 2의 x는 함수 f의 인자로서, 함수 f가 호출될 때 인자로 받은 값을 저장할 것이고,

    line 3의 y는 1이라는 값을 정의하고 있다.

     

    Bound occurrences는

    • line 4. x
    • line 4. y
    • line 5. f

    line 4의 x는 함수 f가 호출될 때 인자로 받은 값이 저장되어있어 이를 사용하고 있고,

    line 4의 y는 line 3에서 1로 정의한 값을 가져와서 사용하고 있고,

    line 5의 f는 line 2에서 정의한 함수를 가져와서 호출하고 있다.

     

    Free identifier는

    • line 1. f
    • line 6. x, z

     line 1의 f는 어떠한 함수를 호출하고는 있지만, 정의된 값이 없어서 사용할 수 없기 때문에 bound occurrence가 되지 못한다.

    line 6의 x와 z는 변수에 저장된 값을 사용하려 하고 있지만, 저장된 값이 없어서 사용할 수 없기 때문에 bound occurrence가 되지 못한다.

     

     

     

     

    📁 Scope

    Scope란 binding occurrence identifier가 bound될 수 있는 범위를 말한다.

     

    identifier는 scope 내에서 binding-bound 관계가 성립되므로,

    scope는 즉 identifier가 살아있는 범위, identifier에 접근 가능한 범위를 말한다.

     

    이때 scope를 벗어난 접근을 하는 identifier를 free identifier라고 부른다.

     

     

    line 1: let _ = f 0
    line 2: let f x = 
    line 3:     let y = 1 in
    line 4:     x + y
    line 5: let _ = f 1
    line 6: let _ = x - z

    위 코드에서 Binding occurrences의 scope는 다음과 같다.

    • line 2. f -> scope는 line 5-6
    • line 2. x -> scope는 line 3-4
    • line 3. y -> scope는 line 4이다.

     

    line 1: let _ = f 0
    line 2: let rec f x = 
    line 3:     let y = 1 in
    line 4:     x + y
    line 5: let _ = f 1
    line 6: let _ = x - z

    위 코드에서 Binding occurrences의 scope는 다음과 같다.

    • line 2. f -> scope는 line 3-6
    • line 2. x -> scope는 line 3-4
    • line 3. y -> scope는 line 4이다.

     

    위 예시와 다른점은 line 2에 rec 키워드이다. 이에 맞추어 line 2 f의 scope가 5-6 에서 3-6으로 바뀌었다.

     

     

     

     

    📁 Shadowing

    Identifier가 binding occurrence로 등장 후 scope 내에서 binding occurrence로 재등장하는 것을 shadowing 현상이라고 말한다.

     

    즉 shadowing은 변수의 scope 내에서 같은 이름의 변수가 정의되는 현상을 말하는 것으로, 동일한 identifier의 scope가 중첩되는 현상이 발생한다.

     

    Bound occurrence identifier는 innermost binding occurrence identifier를 참조한다.

    즉 Innermost binding occurrence identifier가 outer binding occurrence를 가리는 현상이 발생하고, 이것이 shadowing이다.

     

     

     

     

    📁 Extension of NAE : VAE

    해당 포스팅에서는 NAE에 변수를 추가하여 확장한 VAE(Variable and NAE)를 정의한다.

     

    이때 모든 변수는 불변임을 가정하여, 변수가 어떤 값에 binding되면 값 변경이 불가능하도록 한다.

     

     

     

    📁 Concrete Syntax in VAE

    VAE는 하나의 표현식으로 이루어진 프로그램이다.

    가장 상단의 expr은 이를 의미한다.

     

    # let var = expr in expr는 변수를 binding하고 scope를 정의하는 concrete syntax이다.

     

    # var는 변수를 의미하는 concrete syntax이다.

    변수를 expression 내에서 활용하기 위한 용도, 즉 호출하기 위한이다.

     

     

     

     

    📁 Abstract Syntax in VAE

     

     

     

     

    📁 Store : abstract memory(추상 메모리)

    VAE 언어를 정의할 때, 변수 값을 저장하고 호출할 수 있어야 하므로 변수 값을 저장할 추상메모리의 정의가 필요하다.

     

     

     

    📁 Semantics in VAE

    Semantics relation

     

     

    Semantics and Formal Semantics

     

     

     

    📁 Proof tree

     

     

    728x90
    반응형
    LIST