A-정규형

A-normal form

컴퓨터 과학에서, A-정규 형식(약칭 ANF)은 함수 컴파일러에서 프로그램중간 표현입니다.ANF에서 함수에 대한 모든 인수는 사소한(상수 또는 변수)이어야 합니다.즉, 각 인수의 평가는 즉시 정지해야 합니다.

ANF는 1992년[1] Sabry와 Felleisen에 의해 연속 통과 스타일(CPS)의 단순한 대안으로 도입되었습니다.CPS를 중간 표현으로 사용하면 소스 언어보다 CPS의 프로그램에서 최적화를 쉽게 수행할 수 있고 컴파일러가 CPS의 프로그램용 기계 코드를 쉽게 생성할 수 있다는 장점이 있습니다.Flanagan [2]등에서는 컴파일러가 ANF를 사용하여 하나의 소스 레벨 변환으로 동일한 이점을 달성하는 방법을 보여 주었다. 이와는 대조적으로 실제 컴파일러의 경우 CPS 변환에는 일반적으로 CPS 용어를 단순화하는 추가 단계가 수반된다.

본 기사에서는 약감소 및 let-표현이 있는 θ-calculus의 관점에서 표현되는 기본적인 정의를 다루며, 여기서 제한은 다음과 같이 시행된다.

  1. 함수 애플리케이션의 인수로 기능할 수 있는 것은 상수, θ-점수 및 변수뿐입니다.
  2. let-bound 변수에 의해 캡처되거나 함수에서 반환되는 비-bound 식의 결과를 요구합니다.

문법.

다음의 BNF 문법은, ANF 의 제약을 서포트하기 위해서 변경된 순수 「계산」을 나타내고 있습니다.

EXP ::= VAL = EXP = VAL = EXP VAL ::= VAR val VAR . EXP

컴파일러 또는 연구에 사용되는 ANF의 변형은 종종 상수, 레코드, 튜플, 다중 인수 함수, 원시 연산 및 조건식도 허용합니다.

표현:

f(g(x),h(y)

ANF에서는 다음과 같이 기술되어 있습니다.

v0 = g(x) in let v1 = h(y) in f(v0,v1)

「 」를 참조해 주세요.

레퍼런스

  1. ^ Sabry, Amr; Felleisen, Matthias. "Reasoning about Programs in Continuation-Passing Style". Proceedings of the 1992 ACM Conference on LISP and Functional Programming, LFP'92. San Francisco, CA, USA. Sabry92. Retrieved 2020-10-15.
  2. ^ Flanagan, Cormac; Sabry, Amr; Duba, Bruce F.; Felleisen, Matthias. "The Essence of Compiling with Continuations" (PDF). Proceedings ACM SIGPLAN 1993 Conf. on Programming Language Design and Implementation, PLDI'93. Albuquerque, NM, USA. Flanagan93. Retrieved 2012-11-16.