[PL] Langauge Extension : F1VAE -> Multiple Support F1VAE

parkheeddong·2023년 6월 5일
0
post-thumbnail

📌 Lexical Scope vs Dynamic Scope

🔔 Lexical Scope

변수(identifier)의 scope이 compile time에 정의된다.
변수의 bind-bound 관계는 프로그램 구조에 따라서 결정된다. (early-binding)
대부분의 프로그래밍 언어에 해당한다.

위 코드에서 z는 def f x = x + z에서 정의되지 않았으므로, free identifier error을 일으킨다.

🔔 Dynamic Scope

변수의 scope이 runtime에 결정된다.
변수의 bind-bound 관계는 runtime 상에서 그 호출된 상태의 메모리에 따라서 결정된다. (late-binding)
높은 단계의 program freedom을 가진다.

dynamic scope에선 위 코드가 오류가 아니다. z가 free identifier이어도 신경쓰지 않는다. bind-bound를 compile time에 하지 않기 때문이다.
bind-bound 관계는 program이 실행될 때까지 기다렸다가, 함수가 호출될 때까지 기다린다. 따라서 bind-bound 는 함수가 호출된 이후에, 메모리에 따라서 실행된다. y = 3, z = 4가 memory에 저장되어 있으니까, z가 사용될 때 4가 된다. 즉, def f x = z + x에서의 z는 z = 4에 bound된다.
따라서 f ( z - y ) 호출 될 때, z 는 4이고 y는 3이므로 1이 인자로 전달되고, x + z는 5가 된다.

1) F1VAE의 Concrete Syntax

기존의 Concrete Syntax에서는, 파라미터가 1개뿐인 함수만을 정의할 수 있었다. 그리고 prog ::= decl expr로서, 함수가 하나만을 정의할 수 있었다.

즉 함수가 하나고, 그 함수의 파라미터는 하나뿐이었다.

여러개의 함수, 여러개의 파라미터가 가능하게 바꿔보자!

decl_list를 만들고, program ::= decl_list expr | expr로 하여 여러개의 함수가 가능하게 했다.

program은 expr도 가능하기에, 함수가 없을 수도 있다. 즉 program은 0 or more functions가 가능하다!

-> def f x = x + 1 endef def g x = x - 1 endef f(g(1)) 도 유효한 syntax가 된다.

2) F1VAE의 Abstract Syntax

Overbar는 0 혹은 그 이상을 의미한다.

3) Formal Semantics

4) Example

5) F1VAE의 Concrete Syntax

multiple parameter가 가능하도록 업데이트해보자.
var_list ::= var var_list | var이 된다.
더불어 decl ::= def var = expr endef로 함으로써, 파라미터가 아예 존재하지 않는 것도 가능케 한다.

6) F1VAE의 Abstract Syntax

7) Define Abstract Memory for Multiple Paramenters

🌱 Fstore는 추상 메모리에 저장된 함수들을 나타낸다.

Fstore = 함수 이름을 입력받아 매개 변수 목록과 함수 본문으로 이루어진 쌍(pair)을 반환하는 함수들의 집합(set)

🌱Fstore의 표기

Fstore : Var -> Varlist x E
함수 이름을 입력받아 매개 변수 목록(Varlist)과 함수 본문(E)으로 이루어진 쌍을 반환하는 함수들의 집합을 의미

🌱 Λ 의미

Λ은 Fstore에 속하는 하나의 원소(element)이다.추상 메모리에 저장된 하나의 함수를 나타낸다. Λ ∈ Fstore는 "Λ이 Fstore에 속한다"는 의미이다.

🌱 추상 메모리를 사용하기 위한 함수

Λ(x): 추상 메모리 Λ에서 x의 값을 반환한다 즉, Λ(x)는 함수 이름 x에 해당하는 매개 변수 목록과 함수 본문 쌍을 반환한다.

Λ[x1↦([x21 ; … ; x2n], e)]: 추상 메모리 Λ에서 함수 이름 x1을 ([x21 ; … ; x2n], e)로 업데이트하고 새로운 추상 메모리를 반환한다. 이는 함수 이름 x1에 해당하는 매개 변수 목록과 함수 본문을 업데이트한 새로운 추상 메모리를 생성하는 것을 의미한다

7) Formal Semantics

8) Example

0개의 댓글