ML/I
ML/IML/1(Macro Language/One)은 강력한 범용 매크로 [1]프로세서입니다.
ML/1의 일반적인 용도는 다음과 같습니다.
- 텍스트 파일 편집, 수정, 수정 또는 다시 포맷
- 소스 코드를 프로그래밍 언어 간에 변환
- 사용자가 기존 프로그래밍 언어에 새로운 구문 형식을 추가할 수 있도록 소스 코드 프리프로세서로서 기능하는
- 지원 프로그램 소스 코드 매개 변수화(예: 매개 변수는 디버깅 문이 컴파일러에 전달되는 프로그램 소스 코드에 포함되는지 여부를 결정할 수 있음)
ML/1은 1966년 피터 [2]J. 브라운이 영국 캠브리지 대학의 박사 연구 일환으로 개발한 것입니다.
1984년, 로버트 D.Kent 대학의 Peter Brown의 동료 중 한 명인 Eager는 ML/I를 다시 썼는데, 처음에는 1981년에 BCPL에서, 나중에는 1984년에 C에서 다시 썼고, 이로 인해 휴대성이 향상되었습니다.
- Peter Brown의 원래 이름은 ML/I이며, IBM의 PL/I에서와 같이 마지막 문자는 아랍 숫자 "1"이 아닌 로마 숫자 "I"입니다.그러나 이후의 대부분의 구현은 ML/1이라고 불립니다(마지막 문자는 아랍어 숫자 "1").
이후 ML/1은 VMS, MVS, MS-DOS, OS/2 및 UNIX를 포함한 많은 플랫폼과 운영체제로 이식되었습니다.Bob Eager는 ML/1을 구현하면서 Peter Brown의 논문에 원래 명시된 기능 외에 기능을 추가했습니다.
이 버전은 ML/1 웹 사이트(http://www.ml1.org.uk에서 여러 플랫폼에서 사용할 수 있습니다.ML/1 웹 사이트에서는 ML/1에 대한 추가 정보와 설명서(자습서, 간단한 소개 가이드 및 전체 사용자 설명서 포함)를 제공합니다.
전 세계 ML/1 사용자 수는 적지만 전 세계에 ML/1 사용자가 있으며, Bob은 미국, 캐나다, 호주, 뉴질랜드, 독일, 네덜란드, 인도의 ML/1 사용자와 통신하고 있습니다.
1976년 논문에서 앤드류 S. Tanenbaum은 ML/I를 컴파일러로 [3]사용하는 것을 설명합니다.
개요
ML/I는 데이터를 일련의 라인이나 레코드가 아닌 바이트 스트림으로 취급하는 완전 자유로운 형식의 입력을 받아들입니다.매크로 확장을 나타내기 위해 특별한 플래그가 필요하지 않으므로 임의 텍스트를 처리하는 데 특히 유용합니다.텍스트 대체는 단순(예: PIG를 DOG로 대체함) 또는 복합(예: 마지막 완전 정지 후 세 번째와 네 번째 쉼표 사이의 항목을 일부 카운터의 내용으로 대체함)일 수 있습니다.
ML/I는 자신을 포함한 여러 가지 휴대용 소프트웨어를 구현하는 데 사용되었습니다.원래는 특수한 기술 언어로 작성된 후 각 대상 시스템에 적합한 언어로 매핑되었습니다.이 매핑은 ML/I 자체를 사용하여 수행되었습니다.이 서술적 언어에는 높은 수준과 낮은 수준이라는 두 가지 다른 형태가 있었다.
이 매핑 이후 ML/I는 새로운 세대의 16비트 아키텍처 미니컴퓨터를 위한 SIL(C 등의 시스템 구현 언어)을 구현하기 위해 자주 사용되었습니다.
ML/1의 구조
가장 기본적인 용어로 ML/1의 구조를 다음에 나타냅니다.
- 사용자는 ML/1에 입력 텍스트를 포함하는 파일을 제공합니다.
- 다른 파일(또는 같은 파일)에서 사용자는 ML/1 매크로 세트를 제공합니다.매크로는 사용자가 입력 텍스트에 대해 원하는 삽입, 삭제, 확장, 번역 및 기타 수정 사항을 ML/1 인터프리터에 알려줍니다.
- 입력 텍스트에서 ML/1을 실행하는 경우 ML/1은 ML/1 매크로의 지침에 따라 텍스트를 변경하고 수정된 텍스트를 포함하는 새 파일을 씁니다.
ML/1의 특징
ML/1이 단순한 "스캔 앤 치환" 유틸리티보다 강력한 방법은 여러 가지가 있습니다.
ML/1은 문자열을 기준으로 텍스트를 처리하지 않습니다.단어 단위로(또는 ML/1의 용어로는 "atom by atom") 텍스트를 처리합니다.많은 응용 프로그램에서 텍스트를 문자 시퀀스가 아닌 원자 시퀀스로 처리할 수 있는 것은 매우 유용합니다.예를 들어 DO가 있는 프로그래밍 언어에서 프로그램을 번역하고 싶다고 가정해 보겠습니다.END 구문, BEGIN이 있는 언어로...END 구문따라서 "DO"를 "BEGIN"으로 대체하고 싶습니다.통상적인 스캔 앤 치환 유틸리티로 치환을 실시하면, 문자열 「DO」의 모든 항목이 「BEGIN」으로 변경됩니다.「DO」는 「DOCUMENT」(「BEGINCUMENT」가 됩니다)등의 단어에 짜넣어진 「DO」를 포함합니다.반면 ML/1에서는 문자열 "DO"가 단어로 발생할 때만(즉, 공백, 탭, 줄바꿈 또는 구두점 문자와 같은 구분자 앞에 오는 경우) 텍스트 치환을 트리거하기 때문에 이 문제가 발생하지 않습니다.
ML/1은 행 단위로 동작하는 것이 아니라 매우 복잡하고 중첩된 여러 딜리미터로 여러 행에 걸친 텍스트 패턴을 인식합니다.예를 들어 ML/1은 공통 프로그래밍 언어 IF와 같은 패턴을 처리할 수 있습니다.그러면...그렇지 않으면...여러 줄에 걸쳐 있는 ENDIF 구조체.내스트된 IF를 포함할 수 있는 텍스트가 포함되어 있습니다.그러면...그렇지 않으면...ENDIF 구조
ML/1은 내장된 코멘트 및 인용문을 인식하여 변경으로부터 보호할 수 있습니다.일반적인 스캔 앤 치환 유틸리티는 키워드 또는 변수 이름으로 프로그램텍스트에 나타나든 코멘트에 포함되어 있든 따옴표로 둘러싸인 리터럴에 있든 상관없이 문자열을 무차별적으로 변경합니다.
이러한 복잡한 패턴에 대처하기 위해서는 ML/1 자체가 프로그래밍 언어여야 합니다.다른 프로그래밍 언어와 마찬가지로 ML/1은 변수 및 할당 문, GOTO 및 레이블, IF...를 지원합니다.그 후 테스트와 루프를 실시합니다.이러한 기능을 통해 ML/1은 비정상적인 수준의 전력과 유연성을 제공합니다.
제한 사항
ML/1은 대소문자를 구분하기 때문에 대소문자를 구분하지 않는 텍스트 처리를 지원하지 않습니다.
레퍼런스
- ^ A. J. Cole (26 November 1981). Macro Processors. CUP Archive. p. 85. ISBN 978-0-521-28560-5.
- ^ Brown, P. J. (1967). "The ML/I macro processor". Communications of the ACM. 10 (10): 618–623. doi:10.1145/363717.363746. ISSN 0001-0782.
- ^ Tanenbaum, A.S. (1976). "A General-Purpose Macro Processor as a Poor Man's Compiler-Compiler". IEEE Transactions on Software Engineering. SE-2 (2): 121–125. doi:10.1109/TSE.1976.233539. ISSN 0098-5589.
