[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개의 댓글

관련 채용 정보