목차
📁 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