스누볼

SNOBOL
스누볼
패러다임필수적이고 구조화되지 않은
설계자데이비드 J. 파버, 랄프 E. 그리즈월드이반 P. 폴론스키
개발자데이비드 J. 파버, 랄프 E. 그리즈월드, 이반 P.Polonsky 및 Bell 연구소
처음 등장한1962년; 60년 전 (연방)
안정된 릴리스
SNOBOL4 / 1967; 55년 전(1967년)
웹 사이트https://www.regressive.org/snobol4/
주요 구현
스누볼, 스핏볼
영향을 받다
컴밋
영향받은
AWK, SL5, 아이콘, bs, Lua

SNOBOL(스트라이닝 지향 및 심볼)BOLIC Language)는 1962년부터 1967년까지 AT&T Bell 연구소에서 David J. Farber, Ralph E. Griswold 및 Ivan P에 의해 개발된 일련의 프로그래밍 언어입니다.폴론스키, SNOBOL4로 끝납니다.1950년대와 1960년대에 개발된 텍스트 문자열 지향 언어 중 하나였으며, 다른 언어로는 COMITTRAC가 있었다.

SNOBOL4는 패턴을 퍼스트 클래스 데이터 타입(즉, 프로그래밍 언어에서 다른 데이터 타입에 허용되는 모든 방법으로 값을 조작할 수 있는 데이터 타입)으로 하고, 패턴 연결 및 교체를 위한 연산자를 제공함으로써 그 시대의 대부분의 프로그래밍 언어와는 구별된다.SNOBOL4 패턴은 객체의 한 종류이며 다양한 조작을 허용합니다.패턴이 정규 표현으로 알려진 자바스크립트와 같은 이후의 객체 지향 언어와 매우 유사합니다.또한 실행 중에 생성된 SNOBOL4 문자열은 프로그램으로 처리되어 해석되거나 컴파일되어 실행될 수 있습니다(다른 언어의 평가 함수).

SNOBOL4는 1960년대 후반과 1970년대 초반에 미국의 큰 대학에서 매우 폭넓게 가르쳤고 1970년대와 1980년대에 인문학의 텍스트 조작 언어로 널리 사용되었다.

1980년대와 1990년대에는 AWK와 Perl과 같은 새로운 언어가 정규 표현을 통한 문자열 조작을 유행화하면서 그 용도가 희미해졌다.SNOBOL4 패턴은 컨텍스트프리 문법과 동등하고 정규 [1]표현보다 강력한 BNF 문법을 채택합니다.AWK 및 Perl의 현재 버전에서 "정규 표현식"은 사실 전통적인 의미의 정규 표현식의 확장입니다만, SNOBOL4 패턴과는 달리 정규 표현식은 재귀적이지 않습니다.SNOBOL4 [2]패턴에 뚜렷한 계산상의 이점을 제공합니다.(재귀 표현식은 Perl 5.10에 나타나지만 12월에 출시되었습니다.2007년).[3][4]

이후 SL5(1977년)[5]와 아이콘(1978년) 언어는 SNOBOL4 패턴 매칭의 백트랙킹과 보다 표준적인 ALGOL과 유사한 구조를 결합하기 위해 그리즈월드에 의해 설계되었다.

발전

SNOBOL1

초기 SNOBOL 언어는 다항식의 상징적 조작을 위해 저자들이 사용하는 도구로서 만들어졌다.IBM 7090용 어셈블리 언어로 작성되었습니다.단순한 구문, 하나의 데이터 유형, 문자열, 함수가 없으며 선언이 없고 오류 제어가 거의 없습니다.그러나, 그 단순함과 "개인적인" 성격에도 불구하고, 그 사용은 다른 집단으로 확산되기 시작했다.그 결과, 저자들은 그것을 연장하고 정리하기로 결정했다.

SNOBOL2

SNOBOL2는 존재했지만 사용자 정의 함수가 없는 짧은 중간 개발 버전이었고 출시되지 않았습니다.

SNOBOL3

SNOBOL은 표준 및 사용자 정의 함수를 추가하기 위해 다시 작성되었고, 그 결과는 SNOBOL3으로 발표되었습니다. SNOBOL3은 상당히 인기를 끌었고 다른 프로그래머들에 의해 IBM 7090이 아닌 다른 컴퓨터용으로 다시 작성되었습니다.그 결과, 호환되지 않는 여러 방언들이 생겨났다.

SNOBOL4

SNOBOL3가 인기를 끌면서 저자들은 그 언어에 대한 확장 요청을 점점 더 많이 받았다.그들은 또한 자신들이 작성하지 않은 버전의 비호환성과 버그에 대한 불만을 받기 시작했다.이 문제를 해결하고 1960년대 후반에 도입된 새로운 컴퓨터를 활용하기 위해, 많은 추가 데이터 타입과 기능을 갖춘 SNOBOL4를 개발하기로 결정했지만,[6] 가상 머신에 기반하여 컴퓨터 간의 이동성을 개선했습니다.SNOBOL4 언어 번역기는 여전히 어셈블리 언어로 작성되었습니다.그러나 어셈블러의 매크로 기능은 SNOBOL 구현 언어인 SIL의 가상 머신 명령을 정의하는 데 사용되었습니다.이를 통해 매크로 어셈블러 또는 고급 [7]언어를 포함하는 모든 머신에서 변환기를 호스팅한 가상 머신을 비교적 쉽게 포팅할 수 있게 되어 언어의 이식성이 크게 향상되었습니다.

머신에 의존하지 않는 언어 SIL은 초기 SNOBOL 구현에서 광범위하게 사용된 Douglas McIlroy에 의한 문자열 조작 매크로의 일반화로서 생겨났다.1969년 맥일로이는 SNOBOL4에 테이블 [8][9]유형을 추가할 것을 주장함으로써 언어에 다시 영향을 주었다.

SNOBOL4 기능

SNOBOL은 Fortran 및 ALGOL과 같은 현대의 절차 언어와는 근본적으로 다른 형식과 프로그래밍 스타일에서 독특합니다.

SNOBOL4는 정수 및 제한된 정밀도 실수, 문자열, 패턴, 배열테이블(관련 배열)과 같은 많은 내장 데이터 유형을 지원하며 프로그래머가 추가 데이터 유형과 새로운 함수를 정의할 수 있도록 합니다.SNOBOL4의 프로그래머 정의 데이터 유형 기능은 그 당시에 발전되어 있었다. 이것은 이전의 코볼과 이후의 파스칼 프로그래밍 언어의 기록과 유사하다.

모든 SNOBOL 명령줄은 다음과 같습니다.

레이블 제목 패턴 = 물건 : 갈아타다

5가지 요소는 각각 옵션입니다.일반적으로 피사체패턴과 일치합니다.개체가 있는 경우 일치하는 부분은 교체 규칙을 통해 개체로 대체됩니다.전송은 과목 평가, 패턴 평가, 패턴 일치, 객체 평가 또는 최종 할당의 성패에 따라 절대 분기 또는 조건부 분기일 수 있습니다.실행 중에 프로그램 자체에서 생성 및 컴파일한 코드로의 전송일 수도 있습니다.

SNOBOL 패턴은 매우 단순하거나 매우 복잡할 수 있습니다.단순한 패턴은 텍스트 문자열(예: "ABCD")이지만, 복잡한 패턴은 예를 들어 컴퓨터 언어의 완전한 문법을 설명하는 큰 구조일 수 있습니다.SNOBOL에서 거의 직접 Backus-Naur 형식의 표현에서 거의 변경하지 않고 언어 인터프리터를 구현할 수 있습니다.완전히 이론적인 하드웨어에 대한 매크로 어셈블러와 인터프리터를 작성하려면 수백 줄의 짧은 행이 필요하며, 한 줄의 새로운 명령이 추가됩니다.

복잡한 SNOBOL 패턴은 대부분의 다른 패턴 매칭 언어에서 사용되는 보다 원시적인 정규 표현을 사용하여 실행 불가능하거나 불가능한 작업을 수행할 수 있습니다.이러한 능력의 일부는 이른바 "SPITBOL 확장"에서 비롯됩니다(이후 원래 SNOBOL 4 언어의 모든 현대 구현에 통합되었습니다). 그러나 이러한 확장 기능 없이도 동일한 능력을 달성할 수 있습니다.이 힘의 일부는 패턴 매칭 작업 중에 발생할 수 있는 부작용에서 비롯됩니다. 여기에는 다수의 중간/잠정 매칭 결과를 저장하고 패턴 매칭 중에 사용자가 작성한 함수를 호출하여 원하는 거의 모든 처리를 수행하고 진행 방향 t에 영향을 줄 수 있는 기능이 포함됩니다.패턴 매칭 테이크를 중단하거나 매칭 작업 중에 패턴 자체를 실제로 변경합니다.패턴은 다른 1등급 데이터 항목과 마찬가지로 저장할 수 있으며, 연결해서 다른 패턴 내에서 사용할 수 있으며 매우 복잡하고 정교한 패턴 식을 만드는 데 사용할 수 있습니다.예를 들어 "완전한 이름과 국제 우편 주소"와 일치하는 SNOBOL4 패턴을 쓸 수 있으며, 이는 정규 표현을 사용하는 것조차 실용적이지 않습니다.

SNOBOL4 패턴 매칭은 DCG를 통해 패턴과 같은 구성을 제공하는 논리 프로그래밍 언어 Prolog에서 사용되는 것과 유사한 역추적 알고리즘을 사용합니다.이 알고리즘에 의해 대부분의 언어보다 SNOBOL을 논리 프로그래밍 언어로 사용하기 쉬워집니다.

SNOBOL은 변수, 문자열 및 데이터 구조를 단일 가비지 수집 힙에 저장합니다.

프로그램 예시

'Hello, World!' 프로그램은 다음과 같습니다.

          산출량 = "안녕, 월드!" 끝. 

사용자의 이름을 묻고 출력 문장에 사용하는 간단한 프로그램...

          산출량 = "이름이 뭐야?"           사용자 이름 = 입력           산출량 = "감사합니다." 사용자 이름 끝. 

가능한 세 가지 출력 중에서 선택하려면...

          산출량 = "이름이 뭐야?"           사용자 이름 = 입력           사용자 이름 'J'                                             :S(사랑하다)           사용자 이름 'K'                                             :S(싫어하다) 메흐       산출량 = "안녕하세요." 사용자 이름                                 :(끝.) 사랑하다      산출량 = "반갑습니다" 사용자 이름               :(끝.) 싫어하다      산출량 = "오, 너구나" 사용자 이름 끝. 

더 이상 제공되지 않을 때까지 입력을 계속 요청하려면...

          산출량 = "이 프로그램은 개인 이름을 묻습니다."           산출량 = "아무것도 주지 않고 리턴을 누를 때까지"           이름 수 = 0                                            :(입력) 다시.     이름 수 = 이름 수 + 1           산출량 = 이름 이름 수 ": " 퍼스널명 입력  산출량 = "이름을 알려주세요" 이름 수 + 1            퍼스널명 = 입력           퍼스널명 (1)                                      :S(다시.)           산출량 = "완료했습니다." 이름 수 "이름을 요청했습니다." 끝. 

실장

기존의 실장은 PDP-10으로 컴파일러, 정식 문법, 인공지능, 특히 기계번역자연어 기계해독을 연구하는 데 사용되었습니다.원래 구현은 N.J. Holmdel, Bell Labs의 IBM 7090에서 이루어졌습니다. SNOBOL4는 휴대성을 위해 특별히 설계되었습니다. 첫 번째 구현은 1966년에 IBM 7094에서 시작되었지만 1967년에 IBM 360에서 완료되었습니다.많은 다른 플랫폼으로 빠르게 이식되었습니다.

이것은 보통 매우 높은 수준의 기능을 구현하기 어렵기 때문에 인터프리터로 구현되지만, 인터프리터가 제공하는 거의 모든 기능을 제공하는 SPITBOL 컴파일러라는 컴파일러가 있습니다.

PDP-10의 기존 구현은 매우 느렸고 1972년 미국 뉴저지주 Holmdel에 있는 Bell Labs의 James Gimpel은 SITBOL이라고 명명된 PDP-10용 SNOBOL4의 네이티브 구현을 설계했습니다.그는 그 해 스티븐스 공과대학에서 가르친 스트링 프로세싱 대학원 수업의 기초로서 이 디자인을 사용했습니다(그래서 SITBOL이라고 이름 붙여졌습니다).학생들에게 (PDP-10 어셈블러에서) 구현 섹션이 주어졌고, 학기 내내 SITBOL 구현에 초점을 맞췄다.학기 말까지 80% 이상 완성되었으며, 이후 김펠 교수와 몇몇 학생들에 의해 여름 동안 완성되었습니다.SITBOL은 풀 기능의 고성능 SNOBOL4 인터프리터였습니다.

Gnat Ada 컴파일러에는 패키지(GNAT)가 포함되어 있습니다.Spitbol)는 모든 Spitbol 문자열 조작 시멘틱을 구현합니다.이것은 Ada 프로그램 내에서 호출할 수 있습니다.

미시간 터미널 시스템(MTS)의 파일 에디터는 SNOBOL4 [10]패턴을 기반으로 패턴 매칭을 제공했습니다.

현재 몇 가지 구현을 사용할 수 있습니다.Phil Budne이 작성한 C의 매크로 SNOBOL4는 거의 모든 [11]플랫폼에서 실행할 수 있는 자유로운 오픈 소스 구현입니다.Catspaw, Inc.는 DOS, Macintosh, Sun, RS/6000 등을 포함한 많은 다른 컴퓨터 플랫폼에 SNOBOL4 언어를 상업적으로 구현했으며, 이러한 구현은 현재 Catspaw에서 무료로 이용할 수 있습니다.미네소타 SNOBOL4(Viktors Berstis)는 원본 IBM 메인프레임 버전에 가장 가까운 PC 구현(Fortran-like FORMAT 문 지원 포함)도 [12]무료입니다.

SNOBOL 자체에는 구조화된 프로그래밍 기능이 없지만,[13] Snostorm이라고 불리는 SNOBOL 프리프로세서는 1970년대에 미시간 대학의 미시간 터미널 시스템(MTS) 아래에서 사용하기 위해 Fred G. Swartz에 의해 설계되고 구현되었습니다.Snostorm은 MTS를 실행하는 8~15개의 사이트에서 사용되었습니다.1982년부터 1984년까지 University College London(UCL)에서도 이용 가능했습니다.

Andrew Koenig의 Snocone은 SNOBOL4 언어에 블록 구조 구조를 추가합니다.Snocone은 SNOBOL4의 [14]적절한 슈퍼셋이 아니라 자급자족 프로그래밍 언어입니다.

SPITBOL 구현은 또한 기존의 구조화된 프로그래밍 키워드를 사용하지 않는 동안에도 불구하고 일반적으로 "구조화된 프로그래밍"으로 생각되는 많은 동등한 기능들, 특히 중첩된 if/then/else 유형 구조를 제공하기 위해 사용될 수 있는 많은 기능들을 도입하였다.이러한 기능은 이후 가장 최근의 SNOBOL4 구현에 추가되었습니다.수년간 상용 제품으로 활동한 후, 2009년 4월에 SPITBOL은 GNU General Public License에 따라 자유 소프트웨어로 출시되었습니다.

명명

데이브 [15]파버에 따르면, 그와 그리즈월드, 폴론스키는 "마침내 심볼릭 EXPRESSION 인터프리터 SEXI라는 이름에 도달했다"고 한다.

어느 날 시스템을 조립하기 위한 일괄 작업을 제출하고 작업 카드에 정상적으로 기재되어 있는 첫 번째 카드인 BTL 기준의 저는 제 직업과 제 이름인 SEXI Farber를 쳤습니다.

Comp Center의 한 여학생이 그것을 보고 유머러스하게 "그렇게 생각해요."라고 말했다.

그래서 다른 이름이 필요하단 걸 알 수 있었어!!우리는 앉아서 이야기를 나누며 커피를 마시고 고무밴드를 쏘았다.그리고 너무 오랜 시간이 흐른 후 누군가가 말했다.-아마도 랄프일 것이다.- "우리는 이름을 찾을 기회가 전혀 없다."우리 모두는 모든 볼 언어들의 정신으로 "WE GOT IT - SNOBOL"을 동시에 외쳤다.그리고 나서 우리는 그것이 무엇을 의미하는지 찾기 위해 마음을 다잡았다.

"SNOBOL"의 일반적인 백로니언은 '문자열 지향 심볼 [16]언어' 또는 (준초기주의로서) 'StriNg 지향 심볼'입니다.BOLIC Language'[17] 입니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ Gimpel, J. F. (February 1973). "A theory of discrete patterns and their implementation in SNOBOL4". Communications of the ACM. 16 (2): 91-100. doi:10.1145/361952.361960. S2CID 17059429.
  2. ^ "Dr. Dobb's: Programs That Transform Their Own Source Code; or: the Snobol Foot Joke". Dobbscodetalk.com. Retrieved 2011-12-04.
  3. ^ Contact details. "perlre". perldoc.perl.org. Retrieved 2011-12-04.
  4. ^ "Recursive Regex Tutorial". Retrieved 2017-03-19.
  5. ^ Griswold, Ralph E.; Hanson, David R. (April 1977). "An Overview of SL5". ACM SIGPLAN Notices. 12 (4): 40–50. doi:10.1145/954654.954658. S2CID 38692673.
  6. ^ SNOBOL4 매크로 구현 1장 참조
  7. ^ SNOBOL4는 C를 사용하여 구현되어 가상 시스템 명령을 다시 만들었습니다.
  8. ^ Griswold, Ralph (1978). "A history of the SNOBOL programming languages" (PDF). ACM SIGPLAN Notices. 13 (8): 275–308. doi:10.1145/960118.808393. S2CID 5413577. Archived from the original (PDF) on 2019-03-02.
  9. ^ Wexelblat, Richard L., ed. (2014) [1981]. History of Programming Languages. Academic Press. p. 784. ISBN 9781483266169.
  10. ^ MTS 파일 에디터 소개(University of Michigan Computing Center, 1986).
  11. ^ "SNOBOL4.ORG -- SNOBOL4 Resources".
  12. ^ "The MINNESOTA SNOBOL4 Programming Language".
  13. ^ "SNOSTORM", MTS 9권: MTS의 SNOBOL4, 미시간 대학 컴퓨팅 센터, 1979년 6월, 99-120페이지.2014년 9월 1일 취득.
  14. ^ "The Snocone Programming Language", Andrew Koenig, USENIX, 1985년 6월2014년 9월 2일 취득.
  15. ^ SNOBOL 위키피디아 엔트리를 읽을 가치가 있다--Wikipedias가 아닌 실화 (Dave Farber, 흥미로운 사람들의 메일링 리스트, 2008년 12월 26일)
  16. ^ 컴퓨터인문학 1:158, 1967.
  17. ^ Belzer, Jack; Holzman, Albert G.; Kent, Allen, eds. (1979). "SNOBOL". Encyclopedia of Computer Science and Technology. Vol. 13. CRC Press. p. 173. ISBN 0-8247-2263-9.

추가 정보

  • Emmer, Mark B. (1985). SNOBOL4+: The SNOBOL4 Language for the Personal Computer User. Prentice Hall. ISBN 0-13-815119-9.
  • Gimpel, James F. (1976). Algorithms in SNOBOL4. Wiley. ISBN 0-471-30213-9. Salida, CO: Catspaw, 1986(ISBN 0-939793-00-8).
  • Griswold, Ralph E. (1972). The Macro Implementation of SNOBOL4. W.H. Freeman. ISBN 0-7167-0447-1.
  • Griswold, Ralph E.; Poage, J.F.; Polonsky, I.P. (1968). The SNOBOL4 Programming Language. Prentice Hall. ISBN 0-13-815373-6.
  • Griswold, Ralph E. (1975). String and List Processing in SNOBOL4: Techniques and Applications. Prentice Hall. ISBN 0-13-853010-6.
  • Hockey, Susan M. (1985). Snobol Programming for the Humanities. Clarendon Press. ISBN 0-19-824676-5.

외부 링크