XPL
XPLXPL은 PL/I를 기반으로 한 프로그래밍 언어, 자체 언어로 작성된 휴대용 원패스 컴파일러, 타 언어에 대해 유사한 컴파일러를 쉽게 구현할 수 있는 파서 발생기 도구다.XPL은 컴파일러 설계 원리를 가르치는 방법과 학생들이 그들 자신의 언어를 위한 컴파일러를 만드는 출발점으로 1967년에 설계되었다.
XPL은 윌리엄 M에 의해 설계되고 구현되었다. 맥키먼,[1][2] 데이비드 B 워트먼, 제임스 J. 호닝 등 스탠퍼드대 출신.XPL은 1968년 가을 공동 컴퓨터 회의에서 처음 발표되었다.방법 및 컴파일러는 1971년 교과서 A 컴파일러 제너레이터에 자세히 설명되어 있다.
그들은 이 결합 작업을 '컴파일러 발전기'라고 불렀다.그러나 이는 새로운 언어나 새로운 대상에 대한 컴파일러를 구축하기 위해 언어별 또는 대상별 프로그래밍이 거의 또는 전혀 필요하지 않다는 것을 의미한다.XPL의 더 좋은 라벨은 번역기 쓰기 시스템이다.프로그래밍 코드가 덜 새거나 변경된 컴파일러를 작성하는 데 도움이 된다.
언어
XPL 언어는 주로 컴파일러를 쓰는 업무를 목적으로 하는 PL/I의 단순하고 작고 효율적인 방언이다.XPL 언어도 일단 사용 가능해진 후에는 다른 목적으로 사용되었다.XPL은 간단한 컴파일러에 의해 대부분의 현대 기계에 쉽게 컴파일될 수 있다.컴파일러 내역은 XPL로 쉽게 쓸 수 있고, 코드는 읽기 쉽다.PL/I 언어는 1964년 IBM 위원회에 의해 Fortran, COBOL, ALGOL을 대체하고 모든 고객 및 내부 요구를 충족시키는 포괄적인 언어로 설계되었다.이러한 야심찬 목표들은 PL/I를 복잡하게 만들었고, 효율적으로 구현하기 어려웠으며, 사용할 때 때때로 놀라움을 자아냈다.XPL은 전체 언어의 작은 방언이다.XPL에는 PL/I에서 찾을 수 없는 하나의 추가 기능이 있다: 동적 길이의 STRING 데이터 유형.문자열 값은 오래된 값의 자동 가비지 수집과 함께 별도의 텍스트 전용 힙 메모리 공간에 저장된다.단순 컴파일러가 하는 많은 일은 입력 텍스트와 출력 바이트 스트림을 조작하는 것이므로 이 기능은 XPL 기반 컴파일러를 단순화하는 데 도움이 된다.
구성 요소들
XCOM
XCOM이라고 불리는 XPL 컴파일러는 테이블 구동 파서와 간단한 코드 생성 기법을 이용한 원패스 컴파일러다.XCOM 버전은 서로 다른 컴퓨터 아키텍처를 위해 존재하며, 그러한 대상에 대해 서로 다른 손으로 작성한 코드 생성 모듈을 사용한다.원래 대상은 IBM System/360으로 IBM System/370, IBM System/390 및 IBM System z의 적절한 하위 집합이다.
XCOM은 XPL 소스 코드에서 컴파일되지만, XCOM 자체는 XPL로 작성되기 때문에 컴파일할 수 있다. 즉, 다른 컴파일러에 의존하지 않고 스스로 컴파일하는 컴파일러다.Burroughs B5000 Algol, PL/I, C, LISP, Java를 포함한 몇몇 유명한 언어들은 자체 컴파일러를 가지고 있다.그러한 컴파일러를 만드는 것은 닭과 달걀의 난제다.언어는 먼저 다른 언어로 작성된 임시 컴파일러 또는 심지어 통역자에 의해 구현된다(BCPL이 인코드나 O-code로 할 수 있는 것처럼 중간 코드에 대한 통역기).
XCOM은 XPL 소스 코드를 시스템/360 머신 코드로 변환하면서 버러우스 머신에서 실행되는 알골 프로그램으로 시작했다.XPL 팀은 수동으로 Algol 소스 코드를 XPL 소스 코드로 변환했다.XCOM의 XPL 버전은 Burroughs에서 컴파일되어 시스템/360 기계에 대한 자체 컴파일 XCOM을 만들었다.그 후 알골 버전은 버려졌고, 모든 추가 개선은 XPL 버전에서만 이루어졌다.이것을 편찬기라고 한다.XPL의 저자들은 부트스트래핑 과정을 문서화하기 위해 묘비 도표나 T 다이어그램 등을 발명했다.
새로운 컴퓨터 아키텍처를 위해 컴파일러를 재포집하는 것은 코드 생성 모듈만 변경하면 된다는 점을 제외하면 유사한 작업이다.
XCOM은 원패스 컴파일러(단, 전방 분기, 루프 및 기타 정의된 상황에 대해 방출된 코드 수정 프로세스가 있음)이다.전체 절차나 전체 프로그램을 구문 분석할 때까지 기다리지 않고 문장 내 각 문법 규칙이 인식되면서 문장마다 기계코드를 내보낸다.구문 분석 트리나 기타 필요한 중간 프로그램 양식이 없으며 루프 범위 또는 절차 범위 최적화도 없다.그러나 XCOM은 핍홀 최적화를 수행한다.각각의 문법 규칙에 대한 코드 생성 응답은 그 규칙에 첨부되어 있다.이러한 즉각적인 접근방식은 비효율적인 코드와 기계 레지스터의 비효율적인 사용을 초래할 수 있다.이러한 것들은 구현의 효율성, 즉 앞에서 언급한 동적 문자열의 사용에 의해 상쇄된다: 컴파일 중의 텍스트 처리에서는 하위 문자열 연산이 자주 수행된다.이것들은 정수에 대한 할당만큼 빠르다; 실제 하위 문자열은 이동되지 않는다.간단히 말해서, 그것은 빠르고, 짧은 코스에서 가르치기 쉽고, 적당한 크기의 기억과 어울리며, 다른 언어나 다른 목표 기계에 맞게 바꾸기가 쉽다.
분석기
XCOM 컴파일러에는 손으로 쓴 어휘 스캐너와 기계적으로 생성된 파서가 있다.컴파일러의 입력 언어 구문(이 경우 XPL)은 BNF 문법을 단순화하여 설명한다.XPL의 문법 분석 도구 ANDERY 또는 XA는 이것을 구문 규칙의 모든 법적 조합과 그것들을 식별하는 방법을 설명하는 큰 데이터 표의 집합으로 만든다.이 테이블 생성 단계는 언어가 변경되어야만 다시 수행된다.컴파일러가 실행될 때 이러한 데이터 테이블은 입력 언어를 구문 분석 및 응답하기 위해 언어에 독립적인 작은 구문 분석 알고리즘에 의해 사용된다.이런 스타일의 테이블 구동 파서는 완전히 손으로 쓴 재귀적 하강 파서보다 일반적으로 쓰기가 쉽다.XCOM은 상향식 구문 분석 방법을 사용하며, 이를 통해 컴파일러는 해당 구문의 가장 오른쪽 끝을 볼 때까지 어떤 구문 규칙과 마주쳤는지에 대한 결정을 지연시킬 수 있다.이것은 하향식 방법보다 더 넓은 범위의 프로그래밍 언어를 다루는데, 이때 컴파일러는 구문의 왼쪽 끝만 보았을 때 특정 구문 규칙을 일찍 추측하거나 커밋해야 한다.
런타임.
XPL에는 XPL 문자열 값 할당 및 가비지 수집을 위한 최소 런타임 지원 라이브러리가 포함되어 있다.이 라이브러리의 소스 코드는 XPL로 작성된 대부분의 프로그램에 포함되어야 한다.
스켈레톤
XPL 컴파일러 쓰기 시스템의 마지막 부분은 스켈레톤이라는 이름의 컴파일러의 예다.이것은 단지 XPL의 완전한 문법 대신에 장난감 문법을 위한 파스 테이블이 있는 XCOM이다.만약 그 언어가 XPL과 많이 다르다면, 그것은 어떤 새로운 언어를 위한 컴파일러를 만드는 시작점이다.
엑스몬
XPL은 모니터, XMON의 제어 하에 실행되는데, XCOM 자체 또는 XCOM을 사용하여 개발된 프로그램의 "로더" 역할을 하며, XCOM의 사용을 위한 보조 저장장치 3개를 제공하고 블록 번호로 직접 접속한다.원래 출판된 XMON은 IBM 2311s에 최적화되었다.XMON 매개변수 FILE=는 모니터가 블록 크기가 더 큰 다른 디스크를 효율적으로 사용할 수 있도록 하였다.[3]작업 디스크 블록 크기 역시 XCOM의 컴파일 시간 상수였다.[4]
XMON은 디스크 직접 액세스에 매우 간단한 전략을 사용했다.참고는 디스크 트랙의 주소를 제공했다.POINT는 다음 디스크 트랙의 위치를 NOTE가 이전에 반환한 주소로 설정했다.이 전략은 XMON을 다른 OS에 쉽게 포팅할 수 있도록 하고, 그 당시에 사용할 수 있는 훨씬 더 복잡한 디스크 직접 액세스 옵션을 피하기 위해 채택되었다.[5]
XMON을 NOTE, POINT 및 READ/WRITE Disk 운영의 초기 사용에서 트랙당 정확히 1블록으로 EXCP(즉, 새 레코드 쓰기/생성) 및 XDAP(즉, 이전 레코드 읽기/업데이트)로 변환. 여기서 n은 대상 장치의 물리적 특성에서 런타임에 계산되었으며 1보다 훨씬 클 수 있다.애플리케이션 성능을 크게 개선하고 운영 체제 오버헤드를 줄였다.
원래 OS/360용으로 개발되었지만, XMON(원래 NOTE, POINT 및 READ/WRITE 구현 또는 EXCP 및 XDAP 강화)은 OS/370, XA, OS/390 및 z/OS를 포함하여 후속적으로 출시된 IBM OS에서 변경 없이 실행된다.
파싱
XCOM은 원래 XPL 팀이 발명한 "Mixed Strategy Priority"라는 현재-Obsole bottom-up parse table method를 사용했으며 (공식 공개 버전은 MSP 파서를 유지하며 나중에 발표된 "펩홀 최적화"와 원래 구현 팀 외부에서 개발된 추가 데이터 유형은 포함하지 않는다.)MSP는 니클라우스 위르스가 PL360을 위해 발명한 단순 우선순위 파서 방식의 일반화다.단순 우선 순위는 그 자체로 A+B*(C+D)-E와 같은 표현에 잘 작동하는 사소한 간단한 연산자 우선 방법의 일반화다.MSP 표에는 예상 언어 기호 세 쌍의 목록이 포함되어 있다.이 목록은 문법 크기의 큐브만큼 커지며, 전형적인 전체 프로그래밍 언어의 경우 상당히 커진다.XPL에서 유래한 컴파일러는 기억력이 제한된 1970년대의 미니컴퓨터에 맞추기가 어려웠다.[nb 1]MSP는 또한 모든 가능한 문법을 처리할 만큼 강력하지 않다.언어 설계자가 언어를 널리 사용하기 전에 MSP의 제한에 맞게 언어 정의를 변경할 수 있는 경우에만 해당된다.
토론토 대학은 이후 XCOM과 XA를 도날드 크누스의 LR 파서 바텀 업(bottom-up) 방식의 변형을 사용하도록 바꾸었다.[nb 2]XCOM의 변종은 단순 LR 또는 SLR이라고 불린다.MSP보다 더 많은 그래머를 처리하지만 LALR이나 전체 LR(1)만큼 많은 그래머를 처리하지는 않는다.LR(1)과의 차이는 주로 컴파일 시간 파서 방식이 아닌 테이블 생성기의 알고리즘에 있다.XCOM과 XA는 Unix와 그것의 yacc 파서 발생기 도구의 광범위한 가용성을 앞서고 있다.XA와 yacc는 비슷한 목적을 가지고 있다.
XPL은 오픈 소스다.XPL의 System/360 버전은 IBM SHARE 사용자 조직을 통해 배포되었다.다른 그룹들은 1970년대의 많은 대형 기계에 XPL을 탑재했다.다양한 그룹이 XPL을 확장하거나 다른 중간 크기의 언어를 구현하기 위해 XPL을 사용하였다.
적용들
XPL은 다양한 언어와 시스템을 위한 다수의 컴파일러를 개발하는데 사용되었다.
- 스토니 브룩 파스칼
- HAL/S, 우주왕복선 프로그램에[6] 사용되는 언어
- MALUS(Multiple Console Time Sharing System)를 개발하기 위해 제너럴 모터스가 사용하는 시스템 프로그래밍 언어
- New England Digital은 1970년대 중반부터 실험실 자동화, 컴퓨터 네트워킹 및 음악 합성 하드웨어 제어에 사용되는 ABLE 시리즈 컴퓨터에 "Scientific XPL"이라고 불리는 XPL의 변형을 사용했다.
현재 상태
XPL은 현재 컴퓨터에 계속 포팅되어 있다.x86/FreeBSD 포트는 2000년,[7] 2015년 x86/리눅스 포트, 2017년 XPL-C 번역기가 각각 이뤄졌다.[8][9]
참고 문헌 목록
- Alexander, W. G. 및 Wortman, D. B. "XPL 프로그램의 정적 및 동적 특성" IEEE Computer 1975년 11월, 41-46.
- 안코나, 마시모, 도데로, 가브리엘라, 듀란테, 에르콜 루이지 「번역기 쓰기 시스템을 이용한 마이크로프로세서용 크로스 소프트웨어 개발」 1979년 제4차 소프트웨어 엔지니어링 국제회의의 프로시저: 399-402.
- Kamnitzer, S. H. "XPL을 IBM/360에서 UNIVAC 1100으로 부트스트래핑." ACM SIGPlan Notice 1975년 5월: 14-20.
- Karger, Paul A. "다인종을 위한 XPL의 구현" SB 논문1972년 매사추세츠 공과대학교
- 클룸프, 앨런 R. "우주정거장 비행 소프트웨어: 할/S 아니면 에이다님?"1985년 3월 컴퓨터: 20-28
- 리치, 제프리, 골디, 헬무트."XDS 시그마 5 컴퓨터에 XPL 부팅"소프트웨어: 실습 및 체험 3(1973): 235-244.
- 맥키먼, 윌리엄 M, 호닝, 제임스 J, 워트먼, 데이비드 B.컴파일러 생성기.엥글우드 클리프스, NJ: 프렌티스 홀, 1970.
- 맥키먼, W. M., 호닝, 제임스 J., 넬슨, E. C., D. B. 워트먼 「XPL 컴파일러 제너레이터 시스템」. AFIPS 컨퍼런스 프로시저: 1968 가을 공동 컴퓨터 콘퍼런스.워싱턴 DC: 톰슨 북 컴퍼니.1968: 617-635.
- Sitton, Gary A, Kendrick, Thomas A, Carrick, Jr. A. Gil. "PL/EXUS 언어 및 가상 머신" 과정 1973년 11월 ACM-IEEE의 고등어 컴퓨터 아키텍처 심포지엄 11월: 124-130.
- Slimick, John "현재 시스템 구현 언어:One User's View" 1971년 10월 20일부터 28일까지 시스템 구현을 위한 언어에 관한 SIGPlan 심포지엄의 진행.
- Storm, Mark W, Polk, Jim A. "XPL 기반 컴파일러 제너레이터 시스템의 사용" 1976년 4월 제14회 ACM 동남부 지역 회의의 진행: 19-26.
- 워트먼, D. B. "XPL 구현 목록"ACM SIGPlan 공지사항 1978년 1월: 70-74.
참고 항목
메모들
- ^ 실제로 손으로 작성한 LALR 유사 분석기와 생산한 구문 분석표에 대해 특히 효율적인 "디포케이션" 절차를 이용하여 내부 메모리(DRAM) 48킬로바이트에 불과하고 외부 메모리(플로피 디스크)가 미실행되는 2 MHz Z80 마이크로 컴퓨터에서 전체 XPL 언어에 대한 파서를 생성할 수 있었다.CP/M.이 버전은 1980년에 완성되었다.이후 MacOS(9, 이후 X)로 포팅이 완료되었다.
- ^ 이 버전은 일반 커뮤니티에 공개되지 않았으며, 따라서 이 버전의 저자나 해당 기관의 소유물로 남아 있다.XPL의 SLR(1) 또는 LALR(1) 배포에 대한 반복적인 요청은 그 저자에 의해 무시되었다.
참조
- ^ Shustek, Len (2016-08-02). "In His Own Words: Gary Kildall". Remarkable People. Computer History Museum.
- ^ Kildall, Gary Arlen (2016-08-02) [1993]. Kildall, Scott; Kildall, Kristin (eds.). "Computer Connections: People, Places, and Events in the Evolution of the Personal Computer Industry" (PDF) (Manuscript, part 1). Kildall Family. Archived (PDF) from the original on 2020-06-24. Retrieved 2016-11-17.
{{cite journal}}
:Cite 저널은 필요로 한다.journal=
(도움말) - ^ 컴파일러 생성기 페이지 251
- ^ 컴파일러 생성기, 372페이지
- ^ 컴파일러 제너레이터 부록 A1,7
- ^ "The Development of Hal/S". Department of Computer Science, University of Toronto.
- ^ Bodenstab, Dave. "Dave Bodenstab's Home Page". Retrieved Feb 6, 2015.
- ^ Weaver, Daniel E. (November 21, 2017). "XPL compiler: XPL to C translator". SourceForge. La Jolla, CA: Slashdot Media. Retrieved December 6, 2017.
- ^ shoefoot (Daniel E. Weaver) (November 21, 2017). "Announcing the initial release of an XPL Compiler". Newsgroup: comp.compilers. Usenet: 17-11-001@comp.compilers. Retrieved December 6, 2017.
- 맥키먼, 윌리엄 마샬, 호닝, 제임스 J; 그리고 워트먼, 데이비드 B, 컴파일러 제너레이터(1971), ISBN 978-0-13-155077-3.XPL 시스템의 모든 구성요소의 소스 코드를 포함한 확정적 참조.