디그람과 삼각형

Digraphs and trigraphs

컴퓨터 프로그래밍에서 digraphstrigraps각각 소스 코드에 나타나는 2자와 3자의 시퀀스로, 프로그래밍 언어의 사양에 따라 하나의 문자처럼 취급되어야 한다.

디그그래프와 삼각형을 사용하는 데에는 다양한 이유가 있다: 키보드는 언어의 전체 문자 집합을 포괄하는 키를 가지고 있지 않을 수 있고, 특수 문자의 입력이 어려울 수 있으며, 텍스트 편집자는 일부 문자를 특수 사용을 위해 예약할 수 있다. 삼각형은 일부 EBCD에도 사용될 수 있다.다음과 같은 문자가 없는 ICcode 페이지 { 그리고 }.

역사

C 프로그래밍 언어의 기본 문자 집합은 ISO 646 불변 문자 집합 외부에 있는 9개의 문자를 포함하는 ASCII 문자 집합의 하위 집합이다. 이는 사용 인 인코딩( 가능한 키보드)이 이 9개 문자 중 어느 것도 지원하지 않는 경우 소스 코드를 쓰는 데 문제가 될 수 있다. ANSI C 위원회는 ISO 646 문자 집합을 지원하는 키보드를 사용하여 소스 코드를 입력하는 방법으로 삼각형을 개발했다.

구현

삼각형은 가장 복잡한 집합 에서 흔히 볼 수 없다.[1] 일부 컴파일러는 삼각형 인식을 해제하거나 기본적으로 삼각형을 비활성화하는 옵션을 지원하며 삼각형을 켜는 옵션을 요구한다. 어떤 사람들은 소스 파일에서 삼각형과 마주쳤을 때 경고를 할 수 있다. 볼랜드는 별도의 프로그램인 삼각형 전처리기(trigraph preprocessor)를 제공했다TRIGRAPH.EXE(), 삼각형 처리를 원할 때만 사용한다(근거가 컴파일 속도를 극대화하기 위한 것이었다).

언어 지원

서로 다른 시스템에서는 아래에 설명된 바와 같이 서로 다른 세트의 디그람과 삼각형을 정의한다.

알골

ALGOL의 초기 버전은 표준화된 ASCII 및 EBCDIC 문자 집합을 앞섰으며, 일반적으로 제조업체별 6비트 문자 코드를 사용하여 구현되었다. 다수의 ALGOL 연산은 사용 가능한 문자 집합에서 코드 포인트가 부족하거나 주변 장치의 지원을 받지 못하여 다음과 같은 여러 대체물로 이어졌다. := 을 위해 (iii) 및 >= 을 위해 (보다 작거나 같음).

파스칼

파스칼 프로그래밍 언어는 디그그래프를 지원한다. (., .), (* 그리고 *) 을 위해 [, ], { 그리고 } 각각 여기에 언급된 다른 모든 사례와 달리 (* 그리고 *) 이전에도 여전히 널리 사용되고 있다. 그러나 많은 컴파일러들은 이들을 실제 디그라프(digraph)가 아닌 다른 형태의 코멘트 블록(committing block)으로 취급한다. 즉, 코멘트는 다음과 같이 시작되었다. (* 을 막을 수 없다 } 그리고 역도 성립.

J

J 프로그래밍 언어APL의 후예지만 APL 기호 대신 ASCII 문자 집합을 사용한다. ASCII의 인쇄 가능한 범위는 APL의 특수 기호 세트보다 작기 때문에, . (점) 및 : (컬론) 문자는 ASC를 선택하기 위해 사용II 기호, 단문, 디그그램 또는 드물게 삼각형을 독립형 "기호"로 효과적으로 해석한다.[2]

C와 C++에서 digraps와 trigraps를 사용하는 것과 달리, J에서는 이것과 동일한 단문자가 없다.

C

삼각형 등가
??= #
??/ \
??' ^
??( [
??) ]
??!
??< {
??> }
??- ~

C 전처리기(C에 사용되며 C++에 약간의 차이가 있는 경우, 아래 참조)는 이 표에 있는 9개의 삼각형 문자 시퀀스의 모든 발생을 다른 처리 전에 단문자 등가물로 대체한다.[3][4]

프로그래머는 두 개의 물음표를 함께 붙이기를 원하지만 컴파일러가 그것들을 삼각형을 도입하는 것으로 취급하지 않도록 할 수 있다. C 문법은 2회 연속 허용이 안 된다. ? 따라서 C 파일에서 연속해서 두 개의 물음표를 사용할 수 있는 유일한 장소는 다중 문자 상수, 문자열 리터럴 및 주석이다. 이는 상수가 있는 고전적인 Mac OS의 경우 특히 문제가 된다. '????' 파일 형식 또는 작성자로 사용될 수 있다. 문자열 리터럴 내에 연속된 두 개의 물음표를 안전하게 배치하기 위해 프로그래머는 문자열 연결을 사용할 수 있다. "...?""?..." 또는 탈출 순서 "...?\?...".

??? 그 자체가 삼각형 순서가 아니라 다음과 같은 문자가 뒤따를 때 - 로 해석될 것이다. ? + ??-, 16이 있는 아래의 예와 같이. ?s보다 먼저 /.

??/ 삼각형은 라인 스플라이싱을 위해 탈출한 뉴라인을 도입하는 데 사용될 수 있다. 이는 전처리장치 내에서 삼각형의 정확하고 효율적인 처리를 위해 반드시 고려되어야 한다. 그것은 또한 특히 논평 내에서 놀라움을 유발할 수 있다. 예를 들면 다음과 같다.

 // 다음 라인이 실행될까??????/  a++; 

즉, 단일 논리적 주석 라인(C++ 및 C99에서 사용됨)이며,

 /??/  * A 댓글 *??/  / 

정확히 형성된 블록 코멘트야 이 개념은 다음 C99 예에서와 같이 삼각형을 확인하는 데 사용할 수 있으며, 여기서 하나의 반환문만 실행된다.

인트로 삼각형 사용 가능() // 돌아온다 0 또는 1; 언어 표준의 C99 또는 나중의 {  // 삼각형을 사용할 수 있는가?/  돌아오다 0;  돌아오다 1; } 
1994년 C표준에 도입된 대체 디그그래프
디그그래프 등가
<: [
:> ]
<% {
%> }
%: #

1994년에 C99에 포함된 [specify]C 표준에 대한 규범적 개정은 5개의 삼각형에 대한 보다 읽기 쉬운 대안으로 디그그래프를 공급했다.

삼각형과 달리, 디그그래프는 토큰화 중에 처리되며, 디그그래프는 항상 자체로 전체 토큰을 나타내거나 토큰을 구성해야 한다. %:%: 전처리기 연결 토큰 교체 ##. 따옴표로 묶인 문자열 또는 문자 상수와 같이 다른 토큰 내부에서 디그라프 시퀀스가 발생하는 경우, 디그라프 시퀀스를 대체하지 않는다.

C++

토큰 등가
compl ~
not !
bitand &
bitor
and &&
or
xor ^
and_eq &=
or_eq =
xor_eq ^=
not_eq !=

C++(C++14를 통해, 아래 참조)는 C99 추가사항을 포함하여 C처럼 동작하지만 표에 나열된 추가 토큰과 함께 동작한다.[5]

참고로, %:%: 다음의 두 가지 발생이 아닌 단일 토큰으로 취급된다. %:.

C++ Standard에서는 "디그래프"[6]라는 용어에 대해 다음과 같이 언급한다.

대체 전처리토큰(preprocessing-tokens) 중 하나가 있기 때문에 "digraph"(두 문자로 구성된 토큰)라는 용어는 완벽하게 설명되지 않는다. %:%: 물론 몇 개의 기본 토큰에는 두 개의 문자가 포함되어 있다. 그럼에도 불구하고 어휘적 키워드가 아닌 대체 토큰은 구어적으로 "디그래프"라고 알려져 있다.

Trigraps는 C++11로 발매된 C++0x에서 불용되도록 제안되었다.[7] 이는 IBM이 자신들과 [8]C++의 다른 사용자들을 대신하여 말함으로써 반대하였고, 그 결과 Trigraps는 C++11에 보존되었다. 그런 다음 C++17에서 삼각형을 제거하기 위해 다시 제안되었다.[9] 이것은 위원회 투표를 통과했고, IBM의 반대에도 불구하고 삼각형(추가 토큰은 아님)은 C++17에서 제거된다.[10] 삼각형을 사용하는 기존 코드는 원본 파일(파싱 삼각형)에서 삼각형이 포함되지 않은 기본 소스 문자 집합으로 번역하면 지원할 수 있다.[9]

RPL

RPL 언어와 입력 방법을 지원하는 Hewlett-Packard 계산기는 많은 수의 삼각형(TIO 코드라고도 함)을 지원하여 계산기의 확장 문자 세트[11][12][13] 7비트 ASCII 문자를 외국 플랫폼에 안정적으로 변환하고, 를 사용하지 않고도 키보드 입력을 용이하게 할 수 있다. CHARS 응용 프로그램.[14][15][12][13] 모든 TIO 코드의 첫 번째 문자는 \, 그 다음에 대체될 글리프를 막연히 닮은 다른 두 개의 ASCII 문자가 뒤따른다.[14][15][12][13][16] 다른 모든 문자는 특수문자를 사용하여 입력할 수 있다. \nnn nnn이 해당 코드 포인트의 3자리 소수점(필요한 경우 선행 0을 포함)인 TIO 코드 구문(tetraph를 공식적으로 나타냄)[14][12][13]

애플리케이션 지원

Vim 텍스트 편집기는 다음과 같이 텍스트 문자의 실제 입력을 위한 디그그래프를 지원한다. RFC1345. 디그래프 입력은 기본적으로 K+로 되어 있다.[17] Vim에서 가능한 모든 digraphs 목록은 를 입력하여 표시할 수 있다.

GNU 화면

GNU 화면에는 기본적으로 AV++로 바인딩된 digraph 명령이 있다.[18]

로터스

DOS용 Lotus 1-2-3F1+를 합성 키로 사용하여 LICS([19]Lotus International 문자 세트)와 LMBCS(Lotus Multi-Byte 문자 세트)의 많은 특수 문자를 쉽게 입력할 수 있다.

참고 항목

참조

  1. ^ Jones, Derek M. "Sentence 117". The New C Standard: An Economic and Cultural Commentary.
  2. ^ Hui, Roger. "Vocabulary". jsoftware.com. Archived from the original on 2019-04-02. Retrieved 2015-04-16.
  3. ^ British Standards Institute (2003). The C Standard - Incorporating TC1 - BS ISO/IEC 9899:1999. John Wiley & Sons. ISBN 0-470-84573-2.
  4. ^ "Rationale for International Standard - Programming Languages - C" (PDF). 5.10. April 2003. Archived (PDF) from the original on 2016-06-06. Retrieved 2010-10-17.
  5. ^ Stroustrup, Bjarne (1994-03-29). Design and Evolution of C++ (1 ed.). Addison-Wesley Publishing Company. ISBN 0-201-54330-3.
  6. ^ Du Toit, Stefanus, ed. (2012-01-16). "Working Draft, Standard for Programming Language C++" (PDF). N3337. Archived (PDF) from the original on 2019-05-08. Retrieved 2019-05-08.
  7. ^ "C++0X, CD 1, National Body Comments" (PDF). 2009-01-30. SC22/WG21 N2837 comment UK 11. Archived (PDF) from the original on 2017-08-01. Retrieved 2019-05-12.
  8. ^ Wong, Michael; Tong, Hubert; Klarer, Robert; McIntosh, Ian; Mak, Raymond; Cambly, Christopher; LaBonté, Alain (2009-06-19). "Comment on Proposed Trigraph Deprecation" (PDF). N2910. Archived (PDF) from the original on 2017-08-01. Retrieved 2019-05-12.
  9. ^ a b Smith, Richard (2014-05-06). "Removing trigraphs??!". N3981. Archived from the original on 2018-07-09. Retrieved 2019-05-12.
  10. ^ Wong, Michael; Tong, Hubert; Bhakta, Rajan; Inglis, Derek (2014-10-10). "IBM comment on preparing for a Trigraph-adverse future in C++17" (PDF). IBM paper N4210. Archived (PDF) from the original on 2018-09-11. Retrieved 2019-05-12.
  11. ^ HP 82240B Infrared Printer (1 ed.). Corvallis, OR, USA: Hewlett Packard. August 1989. HP reorder number 82240-90014. Archived from the original on 2016-08-14. Retrieved 2016-08-01.
  12. ^ a b c d HP 48G Series – User's Guide (UG) (8 ed.). Hewlett-Packard. December 1994 [1993]. pp. 2–5, 27–16. HP 00048-90126, (00048-90104). Archived from the original on 2016-08-06. Retrieved 2015-09-06. [1]
  13. ^ a b c d HP 50g / 49g+ / 48gII graphing calculator advanced user's reference manual (AUR) (2 ed.). Hewlett-Packard. 2009-07-14 [2005]. pp. J-1, J-2. HP F2228-90010. Archived from the original on 2018-07-08. Retrieved 2015-10-10. 검색 가능 PDF
  14. ^ a b c "HP RPL TIO Table". holyjoe.org. Archived from the original on 2016-05-23. Retrieved 2015-01-23.
  15. ^ a b Heinz, Sr., Michael W. (2005). "HP-ASCII and Trigraphs". Archived from the original on 2016-08-02. Retrieved 2016-08-02.
  16. ^ Finseth, Craig A. (2012-02-25). "chars". Archived from the original on 2017-12-21. Retrieved 2017-12-21.
  17. ^ "Vim documentation: *digraphs-default*". 2011-01-15. Archived from the original on 2018-12-20. Retrieved 2019-05-12.
  18. ^ "Digraph - Screen User's Manual". Archived from the original on 2018-12-31. Retrieved 2019-05-12.
  19. ^ "Appendix F". HP 95LX User's Guide (PDF) (2 ed.). Corvallis, OR, USA: Hewlett-Packard Company, Corvallis Division. June 1991 [March 1991]. F0001-90003. Archived (PDF) from the original on 2016-11-28. Retrieved 2016-11-27.

외부 링크