프리프로세서
Preprocessordata 변환 |
---|
개념 |
변환 언어 |
기술과 변환 |
적용들 |
관련된 |
컴퓨터 과학에서 프리프로세서(또는 프리컴파일러)[1]는 입력 데이터를 처리하여 다른 프로그램의 입력으로 사용되는 출력을 생성하는 프로그램입니다.출력은 입력 데이터의 사전 처리 형식이라고 하며, 컴파일러와 같은 일부 후속 프로그램에서 자주 사용됩니다.처리의 양과 종류는 프리프로세서의 특성에 따라 달라집니다.일부 프리프로세서는 비교적 단순한 텍스트 치환과 매크로 확장을 실행할 수 있는 반면, 다른 프리프로세서는 완전한 프로그래밍 언어의 힘을 가지고 있습니다.
컴퓨터 프로그래밍의 일반적인 예는 컴파일 다음 단계 전에 소스 코드에 대해 수행되는 처리입니다.일부 컴퓨터 언어(C 및 PL/I 등)에는 전처리라고 하는 번역 단계가 있습니다.매크로 처리, 파일 포함 및 언어 확장자를 포함할 수도 있습니다.
사전 프로세서
사용자 정의 규칙에 따라 토큰화된 다른 문자 시퀀스에 토큰화된 문자 시퀀스의 간단한 치환을 수행함으로써 사전 프로세서는 사전 분석만을 필요로 하기 때문에 사전 프로세서의 최하위 수준입니다. 즉, 구문 분석 전에 소스 텍스트에서 작동합니다.일반적으로 매크로 대체, 다른 파일의 텍스트 포함 및 조건부 컴파일 또는 포함을 수행합니다.
C 프리프로세서
가장 일반적인 예는 '#'으로 시작하는 행을 지시어로 사용하는 C 프리프로세서입니다.기본 언어에 대해 아무것도 모르기 때문에, 그 사용법은 비판을 받아 왔고, 많은 기능들이 다른 언어로 직접 내장되어 있다.예를 들어 어그레시브인라인 및 템플릿으로 대체된 매크로에는 컴파일 타임 Import가 포함됩니다(오브젝트코드에 타입 정보를 보존할 필요가 있기 때문에 이 기능을 언어로 변경할 수 없습니다).조건부 컴파일은 효과적으로 이루어집니다.if-then-else
일부 언어에서는 데드 코드 제거가 가능합니다.단, 중요한 점은 모든 프리프로세서 디렉티브는 새로운 행에서 시작해야 한다는 것입니다.
기타 사전 프로세서
다른 사전 프로세서에는 autoconf와 같은 크로스 플랫폼 빌드 시스템에서 가장 일반적으로 사용되는 범용 m4와 컨텍스트 패턴으로 동작하는 오픈 소스 매크로 프로세서인 GEMA가 포함됩니다.
구문 프리프로세서
통사적 프리프로세서는 리스프 어족과 함께 도입되었다.이들의 역할은 다수의 사용자 정의 규칙에 따라 구문 트리를 변환하는 것입니다.일부 프로그래밍 언어의 경우 규칙은 프로그램과 동일한 언어로 작성됩니다(컴파일 시간 반영).이것은 리스프와 OCaml의 경우입니다.XML 용 XSLT 프리프로세서나 스태틱타입의 CDuse 등, 완전한 외부 언어에 의존하는 언어도 있습니다.
통사적 프리프로세서는 일반적으로 언어의 구문을 커스터마이즈하거나 새로운 프리미티브를 추가하여 언어를 확장하거나 범용 언어 내에 도메인 고유의 프로그래밍 언어(DSL)를 포함하기 위해 사용됩니다.
구문 사용자 정의
구문 맞춤의 좋은 예는 Objective Caml 프로그래밍 언어에 두 개의 [2]다른 구문이 존재한다는 것입니다.프로그램은 "일반 구문" 또는 "수정 구문"을 사용하여 무관심하게 작성될 수 있으며, 요청 시 구문 중 하나를 사용하여 예쁘게 인쇄될 수 있습니다.
마찬가지로 OCaml로 작성된 많은 프로그램은 새로운 연산자를 추가하여 언어의 구문을 사용자 정의합니다.
언어의 확장
매크로를 통한 언어 확장의 가장 좋은 예는 리스프 어족에 있습니다.언어 자체는 단순한 동적 유형의 함수 코어이지만 Scheme 또는 Common Lisp의 표준 분포는 정적 타이핑뿐만 아니라 명령형 또는 객체 지향 프로그래밍을 허용합니다.이러한 기능의 대부분은 구문 전처리에 의해 구현되지만 컴파일러의 "매크로 확장" 단계는 Lisp에서 컴파일러에 의해 처리된다는 점에 주목해야 합니다.이는 다른 컴파일 단계보다 먼저 이루어지기 때문에 여전히 전처리의 한 형태로 간주할 수 있습니다.
언어 전문화
Lisp 언어 패밀리의 특이한 기능 중 하나는 매크로를 사용하여 내부 DSL을 작성할 수 있다는 것입니다.일반적으로 대규모 Lisp 기반 프로젝트에서는 모듈을 다양한 미니 언어(SQL 기반 Lisp, GUI 전용 사투리 또는 예쁜 인쇄 등)로 작성할 수 있습니다.Common Lisp의 표준 라이브러리는 LOUP 매크로의 형태로 이 수준의 구문 추상화의 예를 포함하고 있으며, 이것은 표준 Lisp 연산자의 사용을 가능하게 하면서도 복잡한 반복을 기술하기 위해 알골과 같은 미니 언어를 구현한다.
MetaOCaml 프리프로세서/언어는 외부 DSL에도 동일한 기능을 제공합니다.이 프리프로세서는 언어(즉 인터프리터)의 의미에 대한 설명을 가져와서 컴파일 시간 해석과 코드 생성을 조합함으로써 그 정의를 OCaml 프로그래밍 언어, 그리고 그 언어에서 바이트 코드 또는 네이티브 코드로 변환합니다.
범용 프리프로세서
대부분의 프리프로세서는 특정 데이터 처리 태스크(예를 들어 C 언어 컴파일)에 한정됩니다.프리프로세서는 범용으로서 촉진할 수 있다.즉, 특정 용도나 프로그래밍 언어를 목적으로 하지 않고, 다양한 텍스트 처리 태스크에 사용하도록 의도되어 있다.
이러한 범용 프리프로세서의 가장 잘 알려진 예로는 M4가 있습니다.단, C 프리프로세서가 C 이외의 역할로 사용되는 경우도 있습니다.예:
- C 프리프로세서를 사용하여 [3][4]JavaScript 전처리를 수행합니다.
- Linux 커널 내의 디바이스 트리 처리에 [5]C 프리프로세서를 사용합니다.
- 템플릿 엔진으로서 M4(문서상의 예 참조) 또는 C 프리프로세서를[6] 사용하여 HTML 생성을 수행합니다.
- imake는 C 프리프로세서를 사용하는 make 인터페이스로, X Window 시스템용으로 작성되었지만 현재는 자동화를 위해 사용되지 않습니다.
- grompp는 시스템 C 프리프로세서(또는 시뮬레이션 입력 파일에 의해 결정되는 기타 프리프로세서)를 호출하여 토폴로지를 해석하는 GROMACS용 시뮬레이션 입력 파일용 프리프로세서입니다.대부분 #define 및 #include 메커니즘을 사용하여 효과적인 topolo를 판별합니다.gy는 grompp 실행 시 발생합니다.
GPP는 cpp와 유사한 범용 사전 프로세서입니다.특히 마크다운 파일의 [7]전처리에 사용할 수 있습니다.
「 」를 참조해 주세요.
- Directive (프로그래밍)– 컴파일러의 입력 처리 방법을 지정하는 언어 구성
- 메타프로그래밍 – 프로그래밍 패러다임
- 매크로 – 컴퓨터 프로그래밍에서 세트 입력을 세트 출력으로 대체하는 규칙
- 소스 투 소스 컴파일러(트랜스파일러라고도 함)– 컴퓨터 소스 코드 번역자
- Sass(스타일시트 언어)– 스타일시트 언어
- 스타일러스(스타일시트 언어)
- Less (스타일시트 언어)– 동적 스타일시트 언어
- 단편(프로그래밍) – 재사용 가능한 소스 코드, 기계 코드 또는 텍스트의 작은 영역
- 템플릿 엔진– 템플릿과 데이터 모델을 조합하여 결과 문서를 작성하도록 설계된 소프트웨어
- C 프리프로세서: C, C++ 및 Objective-C 프로그래밍 언어로 사용되는 매크로 프리프로세서
- OCaml 프리프로세서 pretty-printer
- PL/I 프리프로세서
- Windows 소프트웨어 트레이스 프리프로세서
- 범용 매크로 프로세서– 특정 언어 또는 소프트웨어에 얽매이지 않거나 통합되지 않은 매크로 프로세서입니다.
레퍼런스
- ^ "What is a precompiler?".
- ^ The Caml language 웹사이트에서 개정된 구문
- ^ JavaScript 파일에서 C-프리프로세서를 사용하는 방법을 보여줍니다.T사의 "JavaScript는 산업력이 아니다" 스나이더.
- ^ "The C Preprocessor in Javascript?". espresso-mode.
- ^ "Kernel/Git/Stable/Linux.git - Linux kernel stable tree".
- ^ C 프리프로세서를 템플릿엔진으로서 사용하는 방법을 나타냅니다.J. Korpela, 2000년 "HTML 오서링 툴로서의 C 프리프로세서 사용"
- ^ "A Blog about ConTeXt".
외부 링크
