For faster navigation, this Iframe is preloading the Wikiwand page for S-표현식.

S-표현식

S-표현식, S-expression 또는 sexp라는 용어는 (S는 Symbolic을 의미) 구조적인 데이터를 사람이 읽을 수 있는 텍스트 형태로 나타내는 방법을 가리킨다. S-표현식은 대체로 리스프 어족의 프로그래밍 언어에서 사용되는 것으로 잘 알려져 있다. 또한 리스프에서 파생된 언어인 DSSSL, IMAP와 같은 통신 프로토콜에서의 마크업, 그리고 존 매카시의 CBCL에서도 S-표현식이 사용되고 있다. 상세한 문법과 제공되는 자료형은 언어들에 따라서 다르지만 가장 일반적인 특징은 괄호로 둘러싸인 prefix 표기법이다 (폴란드 표기법이라고도 부름).

S-표현식은 리스프에서 코드와 데이터 모두를 표현하는 데 사용된다(리스프 참조). S-표현식은 M-표현식으로 다루어지던 데이터를 위한 것이었지만 최초의 리스프 구현은 S-표현식으로 인코딩된 M-표현식의 인터프리터였고 리스프 프로그래머들은 곧 코드와 데이터 양쪽에서 S-표현식을 사용하는 것에 익숙해졌다.

S-표현식은 수, 또는 특별한 아톰 nilt를 포함하는 리스프 아톰, 또는 (x . y)로 쓰는 cons 쌍과 같은 단일 객체가 될 수 있다. 더 긴 리스트는 중첩된 cons 쌍으로 만들어진다. 예를 들어 (1 . (2 . (3 . nil)))(1 2 3)로 편리하게 표시한다.

프로그램 코드는 prefix 표기법을 이용해서 S-표현식으로 나타낼 수 있다. 리스프 프로그램을 작성하기 위해 흔히 사용하는 syntactic sugar로 (quote x)'x로 축약해 나타내는 것이 있다.

예제

[편집]

다음은 계승(factorial)을 구하는 코드이다.

 (defun factorial (x)
    (if (zerop x) 1
        (* x (factorial (- x 1)))))
 (define (factorial x)
     (if (zero? x) 1
         (* x (factorial (- x 1)))))

표준화

[편집]

1997년 5월, Ron Rivest는 RFC로 출판하기 위해 인터넷-드래프트[1]를 제출하였다. 그 드래프트 문서는 리스프 S-표현식에 기초해서 문법을 정의하긴 했지만 특정 프로그래밍을 위해서가 아닌 일반적인 목적의 데이터 저장과 교환을 위한 의도[2]로 작성되었다. 그 문서는 RFC로 인정받지는 못했지만 다른 RFC 문서들[3]과 몇몇 다른 문서들이 참조하거나 인용하였다.[4]

Rivest의 형식은 S-표현식을 octet-문자열 (바이트의 나열) 또는 다른 S-표현식의 유한한 리스트로 정의한다. 이 구조를 표현하는 세 가지 교환 형식은 다음과 같다. 첫 번째는 "향상된 전달(advanced transport)"로 형식이 매우 유연하며 리스프에서의 표현식과 문법적으로 유사하지만 완전히 동일하지는 않다. 예를 들어, "향상된 전달"에서는 octet-문자열을 verbatim (문자열의 길이 뒤에 콜론이 나오고 그 뒤에 원래의 문자열 전체가 나오는 형식의 문자열), escape 문자들을 허용하는 따옴표로 둘러싸인 형식, 십육진법, 또는 베이스64로 나타내거나 특정한 조건을 만족하는 "토큰"으로 바로 나타낼 수 있다. (Rivest의 토큰은 편리성을 위해 만들어졌고 다른 문자열들과 정확히 같게 취급되지만 리스프의 토큰은 명확한 문법적인 의미를 가지고 있다는 점에서 다르다.) 두 번째 교환형식 "정규 표현(canonical representation)"은 더 간결하고 분석하기 쉬우며 모든 추상 S-표현식에 대해서 유일하게 표현할 의도로 만들어졌다. 이 형식은 오직 verbatim 문자열만을 허용하고 문자열 바깥에서 whitespace를 사용하는 것을 금지한다. 마지막으로 "기본 전달 표현(basic transport representation)"은 정규 표현이거나 정규 표현을 베이스64로 인코딩하고 대괄호로 둘러싼 것이다. 후자는 정규적으로 인코딩된 S-표현식을 문자열 간격을 바꾸는 시스템 (예를 들어, 이메일 시스템은 80 글자를 넘는 줄은 줄바꿈을 한다)에서 안전하게 전달하기 위한 것이다.

이 형식은 SPKI 이외에는 널리 받아들여지지 못했다. Rivest의 S-expressions 웹페이지 Archived 2008년 8월 21일 - 웨이백 머신에서 C로 짜여진 파서와 생성기 소스 코드를 제공한다. 이 파서와 생성기는 비록 저작권이 불분명하지만 이론적으로 다른 시스템에 적용될 수 있다. 하지만 이 형식을 독립적으로 구현하는 데는 제약이 없다.

같이 보기

[편집]

각주

[편집]
  1. “보관된 사본”. 2013년 10월 7일에 원본 문서에서 보존된 문서. 2013년 7월 5일에 확인함. 
  2. XML과 비슷하다.
  3. 예: RFC 2693
  4. http://scholar.google.com/scholar?hl=en&lr=&safe=off&q=rivest+sexp&btnG=Search
{{bottomLinkPreText}} {{bottomLinkText}}
S-표현식
Listen to this article

This browser is not supported by Wikiwand :(
Wikiwand requires a browser with modern capabilities in order to provide you with the best reading experience.
Please download and use one of the following browsers:

This article was just edited, click to reload
This article has been deleted on Wikipedia (Why?)

Back to homepage

Please click Add in the dialog above
Please click Allow in the top-left corner,
then click Install Now in the dialog
Please click Open in the download dialog,
then click Install
Please click the "Downloads" icon in the Safari toolbar, open the first download in the list,
then click Install
{{::$root.activation.text}}

Install Wikiwand

Install on Chrome Install on Firefox
Don't forget to rate us

Tell your friends about Wikiwand!

Gmail Facebook Twitter Link

Enjoying Wikiwand?

Tell your friends and spread the love:
Share on Gmail Share on Facebook Share on Twitter Share on Buffer

Our magic isn't perfect

You can help our automatic cover photo selection by reporting an unsuitable photo.

This photo is visually disturbing This photo is not a good choice

Thank you for helping!


Your input will affect cover photo selection, along with input from other users.

X

Get ready for Wikiwand 2.0 🎉! the new version arrives on September 1st! Don't want to wait?