m4(컴퓨터 언어)
m4 (computer language)패러다임 | 매크로 |
---|---|
설계자 | 브라이언 커니건, 데니스 리치 |
처음 등장한 | 전 ( |
주요 구현 | |
GNU m4 |
m4는 대부분의 Unix 계열 운영체제에 포함된 범용 매크로 프로세서이며 POSIX 표준의 구성요소입니다.
이 언어는 UNIX의 원래 버전을 위해 Brian Kernighan과 Dennis Ritchie에 의해 설계되었습니다.이것은 알려지지 않은 AP-3 미니컴퓨터를 위해 [1]Ritchie가 작성한 이전 매크로 프로세서 m3의 확장입니다.
매크로 프리프로세서는 텍스트 치환 도구로 동작합니다.일반적으로 컴퓨터 프로그래밍 응용 프로그램뿐만 아니라 텍스트 편집 및 텍스트 처리 응용 프로그램에서도 텍스트 템플릿을 재사용하기 위해 사용됩니다.대부분의 사용자는 GNU autoconf 의존관계로서 m4가 필요합니다.
역사
매크로 프로세서는 프로그래머가 일반적으로 어셈블리 언어를 사용했을 때 인기를 끌었다.프로그래밍 초기에 프로그래머들은 프로그램의 많은 부분이 반복 텍스트로 구성되었고, 그들은 이 텍스트를 재사용하기 위한 간단한 방법을 발명했다고 언급했다.프로그래머들은 곧 전체 텍스트 블록을 재사용하는 것뿐만 아니라 유사한 매개변수에 다른 값을 대입하는 이점도 발견했습니다.이것에 의해, 매크로 프로세서의 사용 범위가 정의되었습니다.
1960년대에 AT&T 벨 연구소는 더글러스 맥일로이6, 로버트 모리스, 앤드류 [2]홀이 개발한 초기 범용 매크로 프로세서 M을 사용했다.
Kernighan과 Ritchie는 1977년 크리스토퍼 스트레이시의 아이디어를 바탕으로 m4를 개발했다.이러한 매크로 전처리 스타일의 구별되는 특징은 다음과 같습니다.
- 프리폼 구문(어셈블리 언어 처리를 위해 설계된 일반적인 매크로 프리프로세서와 같은 라인 베이스가 아님)
- 재검토의 높은 정도(매크로의 인수는 두 번 확장된다: 스캔 중 1번과 해석 시 1번)
Rational Fortran의 구현은 처음부터 매크로 엔진으로 m4를 사용했으며 대부분의 Unix 변종에는 m4가 함께 제공됩니다.
2021년 현재[update] 많은 응용 프로그램이 GNU 프로젝트의 autoconf의 일부로 m4를 계속 사용하고 있습니다.또한 sendmail 설정 프로세스(범용 메일 전송 에이전트) 및 gEDA 툴 스위트에서 풋프린트를 생성하기 위한 설정 프로세스에도 표시됩니다.SELinux 참조 정책은 m4 매크로 프로세서에 크게 의존하고 있습니다.
m4는 코드 생성에 많은 용도를 가지고 있지만 (다른 매크로 프로세서와 마찬가지로) 문제는 [3]디버깅하기 어려울 수 있습니다.
특징들
m4는 다음 기능을 제공합니다.
- 행에 기초한 구문보다는 자유 형식의 구문
- 고도의 매크로 확장(스캔 중 및 해석 중 다시 확장)
- 텍스트 치환
- 파라미터 치환
- 파일 포함
- 문자열 조작
- 조건부 평가
- 산술식
- 시스템 인터페이스
- 프로그래머 진단
- 프로그래밍 언어에 의존하지 않는
- 인간의 언어에 의존하지 않는
- 프로그래밍 언어 기능을 제공합니다.
대부분의 초기 매크로 프로세서와 달리, m4는 특정한 컴퓨터나 인간 언어를 대상으로 하지 않는다. 그러나 역사적으로 그 개발은 Fortran의 Ratfor 사투리를 지원하기 위해 시작되었다.다른 매크로 프로세서와 달리 m4는 튜링 완전할 뿐만 아니라 실용적인 프로그래밍 언어입니다.
정의된 매크로와 일치하는 따옴표가 없는 식별자는 해당 정의로 대체됩니다.식별자를 따옴표로 묶으면 매크로 치환의 일부로 따옴표로 묶인 문자열이 확장되는 등 나중에야 확장이 억제됩니다.대부분의 언어와 달리 m4의 문자열은 시작 딜리미터로 backtick(')을 사용하고 끝 딜리미터로 아포스트로피(')를 사용합니다.시작 구분자와 끝 구분자를 구분하여 문자열에 따옴표를 임의로 중첩할 수 있으므로 문자열의 다른 부분에서 매크로 확장이 수행되는 방법과 시기를 세밀하게 제어할 수 있습니다.
예
다음 fragment는 HTML 코드를 생성하기 위한 라이브러리의 일부를 구성할 수 있는 간단한 예를 보여줍니다.섹션 번호를 자동으로 지정하기 위한 주석 첨부 매크로를 정의합니다.
divert1) m4에는 "divert" 매크로를 사용하여 조작할 수 있는 여러 출력 큐가 있습니다.유효한 큐의 범위는 0 ~10입니다기본 큐는 0 입니다.확장으로서 GNU m4는 정수 타입 사이즈에 의해서만 제한되는, 보다 많은 디버전스를 서포트하고 있습니다.비활성 큐를 사용하여 "divert" 매크로를 호출하면 다른 콜이 발생할 때까지 텍스트가 파기됩니다.출력이 폐기되는 동안에도 확장을 방지하기 위해 "divert" 및 기타 매크로 주위에 따옴표가 필요합니다.# 댓글 내에서 매크로가 확장되지 않기 때문에 #divert나 기타 빌트인 등의 키워드를 사용할 수 있습니다.#HTML유틸리티 매크로:define(`H2_COUNT의, 0) 떠난 뒤엔 그 H2_COUNT 매크로는 H2매크로 사용될 때마다 다시 정의합니다. define(`H2의,`define(`H2_COUNT'incr(H2_COUNT))<>h2>을 말한다.H2_COUNT달러 1<, /h2>의)dnl 그 dnl 매크로 dnl divert(1)dnl는 선의 휴식을 던져버릴 따라서dnl 출력에 나타나지 않게 원치 않는 빈 선을 방지하는 m4 dnl H2(는 침엽수이며 전나무를 유발한다.t섹션) H2(제2섹션) H2(결론) dnl divert(0) dnl dnl <HTML> undivert(1) dnl 큐 중 하나가 출력에 푸시되고 있습니다.</HTML>
이 코드를 m4로 처리하면 다음 텍스트가 생성됩니다.
<HTML> <h2> 1.첫 번째 섹션 </h2> <h2> 2.두 번째 섹션 </h2> <h2> 3.결론 </h2> </HTML>
실장
FreeBSD, NetBSD 및 OpenBSD는 m4 언어를 독립적으로 구현합니다.또한 Hereloom Project Development Tools에는 OpenSolaris에서 파생된 무료 버전의 m4 언어가 포함되어 있습니다.
M4는 Inferno 운영체제에 포함되어 있습니다.이 구현은 UNIX System V 및 POSIX의 [4]보다 정교한 친척보다 버전7 Unix의 Kernighan 및 Ritchie에 의해 개발된 오리지널 m4와 더 밀접하게 관련되어 있습니다.
GNU m4는 GNU 프로젝트를 [5][6]위한 m4의 구현입니다.최대 회선 길이, 매크로의 최대 크기, 매크로 수 등 기존 m4 구현에서 볼 수 있는 다양한 종류의 임의 제한을 피하기 위해 설계되었습니다.이러한 임의의 제한을 삭제하는 것은 GNU [7]프로젝트의 정해진 목표 중 하나입니다.
GNU Autoconf 패키지는 GNU m4의 기능을 폭넓게 사용합니다.
GNU m4는 현재 Gary V에 의해 유지보수되고 있습니다.본과 에릭 [5]블레이크입니다GNU General Public License 조건에 따라 출시된 GNU m4는 무료 소프트웨어입니다.
「 」를 참조해 주세요.
레퍼런스
- ^ 브라이언 W. 커니건과 데니스 M.리치.m4 매크로 프로세서기술 보고서, Bell Laboratories, 미국 뉴저지주 머레이힐, 1977.pdf.
- ^ Cole, A. J. (1981). Macro Processors (2nd, revised ed.). CUP Archive. p. 254.
- ^ 케네스 J.터너.m4 매크로 언어를 부정 이용하는 중입니다.기술 보고서 CSM-126, 스코틀랜드 스털링 대학 컴퓨터 과학 및 수학부, 1994년 9월 pdf.
- ^ Inferno 일반 명령 설명서 –
- ^ a b GNU m4 웹 사이트 "GNU M4"는 2020년 1월 25일에 접속되었습니다.
- ^ GNU m4 매뉴얼, 온라인 및 HTML, PDF 및 기타 형식으로 다운로드 가능."GNU M4 - GNU 매크로 프로세서" (2020년 1월 25일 액세스)
- ^ "GNU 코딩 표준: 강력한 프로그램 작성"인용문: "데이터 구조의 길이 또는 수에 대한 임의 제한을 피하십시오."
외부 링크

- GNU m4 웹사이트
- GNU m4 매뉴얼
- m4 튜토리얼
- 매크로 매직: m4, 파트 1, 파트 2