스트로핑(구문)
Stropping (syntax)컴퓨터 언어 디자인에서 스트로핑은 문자 시퀀스를 키워드 또는 특정 유형의 변수 또는 저장 위치와 같은 특별한 속성을 가진 것으로 명시적으로 표시하고 충돌을 피하기 위해 일반 이름("식별자")과 다른 네임스페이스에 상주시키는 방법입니다.스트로핑은 대부분의 현대 언어에서는 사용되지 않습니다.대신 키워드는 예약어이므로 식별자로 사용할 수 없습니다.스트로핑에 의해 키워드와 식별자 양쪽에서 동일한 문자 시퀀스를 사용할 수 있으며, 예를 들어 다음과 같은 변수를 사용할 수 있습니다.if
if 키워드와 충돌하지 않습니다.
스트로핑은 주로 1960년대 ALGOL 및 관련 언어와 관련되어 있습니다.비록 그것은 현대적인 용도를 발견하지만, 표면적으로 유사한 다른 유사한 기술들과 쉽게 혼동된다.
역사
스트로핑의 방법과 "스트로핑"이라는 용어는 1960년대 ALGOL의 개발에서 생겨났다.그때, 타자기에는 굵은 글자를 하드웨어 언어로 직접 나타낼 수 없는 인쇄상의 구별(굵은 글씨와 밑줄)을 나타내기 위해 사용되었다.ds 굵은 글자는 없었습니다.스트로핑이라는 용어는 ALGOL 60에서 생겨났습니다.ALGOL 60의 일부 구현에서는 다음과 같은 굵은 [1]글씨를 나타내기 위해 텍스트 주위에 아포스트로피를 사용했습니다.'if'
키워드를 나타냅니다.스트로핑은 ALGOL 68에서도 중요합니다.ALGOL 60에서는 스트로핑의 여러 방법이 사용되고 있습니다.ALGOL 60의 원래 일치된 아포스트로피는 널리 사용되지 않았습니다.다음과 같이 선두의 마침표나 대문자 등이 더 [2]일반적입니다..IF
또는IF
그리고 이 모든 것에 "스트로핑"이라는 용어가 적용되었습니다.
구문
스트로핑에는 다양한 구문이 사용되고 있습니다.
- Algol 60은 일반적으로 단어 주위에 작은 따옴표(일반적으로 아포스트로피)의 규칙만을 사용했는데, 여기서 "스트립핑"이라는 이름이 유래되었다.
'BEGIN'
). - 일부 구현에서 Algol[3][2] 68은 단일 따옴표 '가 프리픽스되는 문자 시퀀스를 키워드(예:
'BEGIN
) [4]。
실제로 한 언어 내에서 여러 개의 스트로핑 규칙이 사용되는 경우가 종종 있었습니다.예를 들어, ALGOL 68에서는 스트로핑 규칙의 선택은 컴파일러 지시(ALGOL 용어에서는 "pragmat"), 즉 POINT, UPER, EQUATE 또는 RES에 의해 지정될 수 있습니다.
- 6비트의 POINT (소문자의 경우 글자 수 부족)와 같이
.FOR
– FORTRAN 77에서도 유사한 규칙이 사용되며, 여기서 LOGICAL 키워드는 다음과 같이 스트로핑됩니다..EQ.
등(아래 참조) - UPER(7비트용)는 다음과 같이
FOR
– 일반 식별자에 소문자를 사용합니다. - ALGOL 60과 같은 견적
'for'
- RES 예약어(현대 언어에서 사용)–
for
예약되어 있어 일반 식별자에서는 사용할 수 없습니다.
다양한 규칙 체제는 스트로핑된 문자의 사전 사양이지만, 경우에 따라서는 간단한 해석이 가능합니다.단일 아포스트로피 및 닷 체제는 첫 번째 문자가 이스케이프 문자로 기능하는 반면 일치하는 아포스트로피 체제는 문자열 리터럴에서와 같이 구분자로 기능합니다.
기타 예:
- Atlas Autocode는 3가지 중에서 선택할 수 있었습니다.키워드는
underlined
Flexowriter 키보드의 백스페이스와 오버스트라이크를 사용하여, 그것들은 다음 명령어에 의해 도입될 수 있습니다.%percent %symbol
또는 입력해 주세요.UPPER CASE
구분 문자('대문자 엘리미터' 모드), 모든 변수는 소문자로 입력해야 합니다. - 엘리엇 803 및 엘리엇 503 컴퓨터의 Algol 60은 밑줄을 사용했다.Flexowriters(펀치된 종이테이프 제작)는 비이동 키(밑줄 _)를 가지고 있어서 _b_e_g_i_n이 생성되어 매우 읽기 쉬웠습니다.세로 막대는 =를 입력할 때 ≠에 대한 근사치가 양호할 정도로 키가 작지 않았습니다.
- English Electric KDF9의 Kidsgrove 60용 컴파일러에서는 따옴표와 퍼센트 문자 외에 적어도 2개의 스트로핑 규칙을 사용한 것으로 보입니다.
- ALGOL 68RS 프로그램은 하나의 언어 프로세서 내에서도 여러 개의 스트로핑 배리언트를 사용할 수 있습니다.
- 에든버러 IMP는 아틀라스 오토코드를 물려받았다.
%percent %symbol
프리픽스 표기법(다른 스트로핑 옵션 제외)
다양한 ALGOL 68 스타일의 예
pragmat의 줄임말인 선행 pr(프래그마트의 약자) 디렉티브에 주의해 주십시오.이 디렉티브는 POINT 또는 Quote 스타일로 스트로핑되어 있으며,¢
코멘트를 위해서(「」로부터)2¢
) – 자세한 내용은 ALGOL 68: pr & co: Pragmats and Comments를 참조하십시오.
Algol68 "엄격" 통상적으로 출판된 바와 같이 | 견적 스트로핑 (Wikitext 등) | 7비트 문자용 코드 컴파일러 | 6비트 문자용 코드 컴파일러 | Res Stropping을 사용한Algol68 (단어) |
---|---|---|---|---|
§ 밑줄 또는 굵은 글씨체 ¢ mode모드 xint = int; xint sum sq:=0; i while sqs sqsu0×70은 sq+=i↑2 od | 'pr' 따옴표 'mode' 'xint' = 'int'; 'xint' 합 sq:=0; 'while' i 'while' 합 sqc470×70 'do' sq+↑i↑2 'od' | .PR UPER.PR 모드 XINT = INT; XINT 합계 sq:=0; i WHIENT 합계 sq/=70*70 DO 합계 sq+:=i**2 OD | .PR POINT.PR.MODE.XINT = .INT; .XINT SUM SQ:=0;SUM SQ를 위해.NE 70*70.DO SUM SQ.PLUSAB I.UP 2 .OD | .PR RES.PR 모드 .xint = int; .xint sum sq:=0, sq7070×70의 경우 sq+=i=2 od |
기타 언어
다양한 이유로 Fortran 77에는 다음과 같은 "논리적인" 값과 연산자가 있습니다. , , , , , , , , , , , , , , , .
에서의 조합 테스트에도 사용됩니다.AND..IF
그리고.IFF
배치 파일의 문은 4DOS,[6] 4OS2, 4NT / Take Command 등의 JP Software 명령줄 프로세서에서 실행됩니다.
현대적 사용
대부분의 최신 컴퓨터 언어에서는 스트로핑을 사용하지 않지만 다음 두 가지 예외가 있습니다.
Microsoft 에서의 다국어 사용.NETComon Language Infrastructure(CLI; 언어 인프라스트럭처)에서는, 다른 언어로 변수를 사용하는 방법이 필요합니다.이러한 변수는, 발신측 언어의 키워드일 가능성이 있습니다.이것은, 다음과 같은 프레픽스에 의해서 행해지는 경우가 있습니다.@
Visual Basic에서는 식별자를 괄호로 묶거나 C#으로 묶습니다.네트워크
두 번째 주요 예는 구조화 쿼리 언어의 많은 구현에서 볼 수 있습니다.이러한 언어에서는 예약어를 사전 구분하여 열, 테이블 또는 변수 이름으로 사용할 수 있습니다.표준에서는 예약어를 큰따옴표로 묶는 것을 규정하고 있지만 실제로는 구현에 따라 정확한 메커니즘이 다릅니다.예를 들어 MySQL은 예약어를 백틱으로 묶어서 다른 컨텍스트에서 사용할 수 있으며 Microsoft SQL Server는 각 괄호를 사용합니다.
스트로핑은 Nim 프로그래밍 언어에서도 사용할 수 있습니다.Nim에서는 예약어를 백틱으로 묶어서 식별자로 사용할 수 있습니다.
또 다른 사소한 예도 있습니다.예를 들어 Web IDL에서는 선행 언더스코어를 사용합니다._
strop 식별자(예약어와 충돌하는 경우): 식별자 값에 따라 이 선행 밑줄이 제거되고 이름 지정 [7]규칙이 아닌 이 스트로핑이 됩니다.
컴파일러에 의한 언트랩
컴파일러 프런트엔드에서 언트랩은 원래 라인 재구성 단계 중에 발생했으며, 이로 인해 공백 공간도 제거되었습니다.그 후 스캐너리스 파싱(토큰화 없음)이 이루어졌습니다.이것은 1960년대, 특히 ALGOL에서는 표준이 되었습니다.현대에서는 언트롭핑은 일반적으로 어휘 분석의 일부로서 행해집니다.이는 렉서를 스캐너와 평가자의 두 단계로 구분하면 명확하다. 즉, 스캐너는 스트로핑된 시퀀스를 올바른 범주로 분류하고 평가자는 값을 계산할 때 분리한다.예를 들어, 첫 번째 언더스코어가 예약된 단어와의 충돌을 피하기 위해 식별자를 strop하기 위해 사용되는 언어에서는 시퀀스가_if
식별자로 분류됩니다(예약어로는 분류되지 않음).if
스캐너에 의해, 평가자는 이것에 값을 부여합니다.if
산출.(Identifier, if)
토큰 유형 및 값으로 지정합니다.
유사한 기술
일반적으로 식별자에 접두사를 붙이거나 서픽스를 붙여서 다른 처리를 나타내지만 의미론은 다양합니다.엄밀히 말하면 스트로핑은 같은 이름(값)을 다른 네임스페이스에 다른 표현으로 구성되며 토큰화 단계에서 발생합니다.예를 들어, ALGOL 60과 일치하는 아포스트로피 스트로핑에서는'if'
(키워드, if)로 토큰화되어 있습니다.if
는 (Identifier, if)로 토큰화되어 있습니다.다른 토큰 클래스에서 같은 값입니다.
키워드에 대문자를 사용하는 것은 렉서링 및 구문 해석을 위한 문법 작성 규약으로서 계속 사용되고 있습니다.예약된 단어를 토큰화합니다.if
if-then-else 구를 나타내는 토큰 클래스 IF로 지정합니다.IF Expression THEN Statement ELSE Statement
여기서 대문자 용어는 키워드, 대문자 용어는 프로덕션 규칙에서 터미널 이외의 기호입니다(터미널 기호는 다음과 같은 소문자로 표시됩니다).identifier
또는integer
(정수 리터럴의 경우).
명명 규칙
가장 느슨하게는 충돌을 피하기 위해 명명 규칙을 사용할 수 있으며, 일반적으로 밑줄로 프레픽스 또는 서픽스를 붙입니다.if_
또는_then
선행 언더스코어는 객체 지향 프로그래밍에서 개인 멤버를 나타낼 때 자주 사용됩니다.
이러한 이름은 컴파일러에 의해 해석되어 어느 정도 효과가 있지만, 일반적으로 토큰화 단계가 아닌 의미 분석 단계에서 수행됩니다.예를 들어 Python에서는 선행 언더스코어 1개가 약한 프라이빗 인디케이터이며 모듈 Import 시 Import되는 식별자에 영향을 미치는 반면 클래스 속성의 선행 언더스코어(후행 언더스코어 1개 이하)는 이름 망글링을 [8]호출합니다.
예약어
현대 언어에서는 일반적으로 스트로핑이 아닌 예약된 단어를 사용하여 키워드와 식별자를 구별합니다.if
reserved – 키워드로서 식별자의 구문 클래스를 예약하는 경우가 많아 스트로핑 방식으로 해석할 수 있지만 대신 예약된 단어의 의미를 가집니다.
일을 식별자의 정확한 세부 사항들 어느 범위에서 예약되어 있는 식별자에 이 가장 C는 11월에 밑줄로 시작하는 식별자 지정석이다,에 포함된다, 그리고 선도하는 더블이 여실히 보여어떤 방법으로 예약되어 있으므로, C++[9] 비슷하게에서 이중 밑줄이 함유된 식별자 어떤 방법으로 예약되어 있 두드러진다.에서는 [nb 1]글로벌 공간에 예약되어 있는 언더스코어로 시작합니다.따라서 새로운 키워드를 추가할 수 있습니다.foo
예약어 사용__foo
이것은 표면적으로는 스트로핑과 비슷하지만 의미는 다릅니다.예약어로서 문자열은__foo
식별자를 나타냅니다.__foo
공통 식별자 네임스페이스에 있습니다.스트로핑 중(키워드 프리픽스에 의한)__
), 문자열__foo
키워드를 나타냅니다.foo
다른 키워드 네임스페이스로 지정합니다.따라서 예약된 단어를 사용하여 토큰은__foo
그리고.foo
are(ID, __foo) 및 (ID, foo)– 같은 카테고리의 다른 값 - 토큰 스트로핑 중__foo
그리고.foo
(foo, foo) 및 (identifier, foo)– 다른 카테고리에서 동일한 값입니다.이것들은 프로그래머와 같은 방식으로 네임스페이스 충돌의 동일한 문제를 해결하지만, 형식적인 문법과 구현 면에서 다릅니다.
이름 망글링
또한 이름 망글링은 식별자의 이름을 변경하여 이름 충돌에 대처하지만, 이는 토큰화가 아닌 시멘틱 분석 중에 컴파일에서 훨씬 늦게 수행됩니다.여기에는 주로 링커에 의해 사용되는 범위 및 유형 정보가 포함된 이름을 생성하여 충돌을 방지하고 이름 자체에 필요한 의미 정보를 포함합니다.이러한 경우 원래 식별자는 동일할 수 있지만, 함수와 같이 컨텍스트가 다릅니다.foo(int x)
대foo(char x)
두 경우 모두 동일한 식별자를 가집니다.foo
, 그러나 시그니처는 다릅니다.이 이름들은 다음과 같이 뭉쳐질 수 있습니다.foo_i
그리고.foo_c
예를 들어 유형 정보를 포함합니다.
시그질스
구문적으로는 비슷하지만 의미적으로는 다른 현상은 기호이며, 대신 변수의 특성을 나타냅니다.Perl, Ruby 및 기타 다양한 언어에서는 변수/상수의 특성을 식별하기 위해 공통적으로 사용됩니다. Perl은 변수 유형을 지정하고 Ruby는 변수와 상수를 구분하며 범위를 나타냅니다.이는 변수의 의미에 영향을 미치며 ID인지 키워드인지 구문에는 영향을 미치지 않습니다.
인간의 언어에서의 유사점
스트로핑은 컴파일러(또는 파서)의 작업을 쉽게 하기 위해 컴퓨터 프로그래밍 언어에서 사용됩니다.즉, 20세기 컴퓨팅 초기에 사용 가능한 비교적 작고 느린 컴퓨터의 기능 내에서 사용됩니다.하지만, 비슷한 기술들이 사람들의 독해력을 돕기 위해서도 일반적으로 사용되어 왔다.예를 들어 다음과 같습니다.
- 스트로핑의 정의가 페이지의 목적이기 때문에, 이 페이지의 선두에 스트로핑이 최초로 언급되는 등, 중요한 단어를 굵은 [10]글씨로 표시합니다.
- 텍스트로 처음 소개될 때 새 단어의 형식을 이탤릭체로[11] 지정합니다.이것은 발명된 식물, 음식, 생물을 소개할 때 공상과학 소설과 판타지, 낯선 외래어를 설명할 때 여행기와 역사 글쓰기 등에서 흔히 사용된다.또한 독일어 단어에 고딕 글꼴을[12] 사용하는 등 해당 언어와 관련된 특수 글꼴을 사용합니다.
- 다른 언어(일반적으로 라틴어 또는 그리스어)를 사용하여 기술 용어를 나타냅니다.이것은 예약된 단어를 사용하는 것과 비슷하지만, 일반적으로 읽기 쉽도록 이탤릭체와 결합됩니다.예를 들어 다음과 같습니다.
- 쓰여진 일본인, 간지 문자가 두개의 뚜렷한 알파벳(더 엄격하게, syllabaries)Hiragana[15][16]과 Katakana,[17]둘 다 소리 같은 표준 군을 대표하는 이외에 수입 말에서 각각 발음대로spelled-out 일본어 단어를 구별하는 것, 카타카나 또한 강조하기 위해, 이탤릭체로 상당히 유사하게 사용되 사용한다.영어.
「 」를 참조해 주세요.
메모들
- ^ 밑줄로 시작하는 식별자, 대문자 등 기타 제약사항이 있습니다.
레퍼런스
- ^ King, Peter R., ed. (1974-06-18). "(unknown)". Proceedings of an International Conference on ALGOL 68 Implementation. Department of Computer Science, University of Manitoba, Winnipeg: University of Manitoba, Department of Computer Science: 148. ISBN 9780919628113.
More serious problems are posed by "stropping", the technique used to distinguish boldface text from roman text. Some implementations demand apostrophes around boldface (whence the name stropping); others require backspacing and underlining; […]
{{cite journal}}
:Cite는 일반 제목(도움말)을 사용합니다. - ^ a b van Wijngaarden, Adriaan; Mailloux, Barry James; Peck, John Edward Lancelot; Koster, Cornelis Hermanus Antonius; Sintzoff, Michel; Lindsey, Charles Hodgson; Meertens, Lambert Guillaume Louis Théodore; Fisker, Richard G., eds. (1976). "Section 9.3 Representations" (PDF). Revised Report on the Algorithmic Language ALGOL 68. Springer-Verlag. pp. 94, 123. ISBN 978-0-387-07592-1. OCLC 1991170. Archived (PDF) from the original on 2019-04-19. Retrieved 2019-05-11.
- ^ http://www.fh-jena.de/~kleine/history/languages/Algol68-R-HardwareRepresentation.pdf[데드링크]
- ^ Lindsey, Charles Hodgson; van der Meulen, Sietse G. (1977). Informal Introduction to ALGOL 68. North-Holland. pp. 348–349. ISBN 978-0-7204-0726-6. OCLC 230034877.
- ^ "Logical Structures".
- ^ Brothers, Hardin; Rawson, Tom; Conn, Rex C.; Paul, Matthias R.; Dye, Charles E.; Georgiev, Luchezar I. (2002-02-27). 4DOS 8.00 online help.
- ^ 웹 IDL, "3.1" 이름"입니다.[…] 이러한 모든 구성에서 식별자는 단일 선행 U+005F LOW LINE("_") 문자(밑줄)가 제거된 식별자 토큰 값입니다.[…] 주 […] 선행하는 "_"는 예를 들어 "interface"라는 이름의 인터페이스를 정의할 수 있도록 식별자가 예약된 단어처럼 보이지 않도록 하기 위해 사용됩니다.선두의 「_」는, 식별자의 이스케이프를 해제하기 위해서 드롭 됩니다.[…]
- ^ PEP 008: 설명: 명명 스타일
- ^ C99 표준, 7.1.3 예약 식별자
- ^ Twyman, Michael. "The Bold Idea: The Use of Bold-looking Types in the Nineteenth Century". Journal of the Printing Historical Society. 22 (107–143).
- ^ Truss, Lynne (2004), Eats, Shoots & Leaves: The Zero Tolerance Approach to Punctuation, New York: Gotham Books, p. 146, ISBN 978-1-59240-087-4
- ^ "Styles of Handwriting". Rigsarkivet. The Danish National Archives. Retrieved 2017-03-26.
- ^ "How to Write Scientific Names of Organisms" (PDF), Competition Science Vision, retrieved 2011-06-20.
- ^ Google Books에서 분류 및 설명되는 법적 격언 선택
- ^ Dual 大辞林
「平」とは平凡な、やさしいという意で、当時普通に使用する文字体系であったことを意味する。 漢字は書簡文や重要な文章などを書く場合に用いる公的な文字であるのに対して、 平仮名は漢字の知識に乏しい人々などが用いる私的な性格のものであった。
번역: 【히라가나】의 「히라」부분은 「보통」 또는 「단순」을 의미하고 있습니다.그 당시에는 일상용 문자였습니다.한자가 편지나 중요한 텍스트에 사용되는 공식 시스템이었던 반면, 히라가나는 한자에 대한 지식이 부족한 사람들이 개인적으로 사용하는 시스템이었다. - ^ "Japanese calligraphy". Encyclopedia Britannica. Retrieved 2017-06-22.
- ^ "Hiragana, Katakana & Kanji". Japanese Word Characters. 2010-09-08. Retrieved 2011-10-15.
추가 정보
- Hansen, W. J.; Boom, H. J. (1978). "Report on the Standard Hardware Representation for Revised ALGOL 68". Acta Informatica. 9 (2): 105–119. doi:10.1007/BF00289072. S2CID 34231916.
- Lindsey, Charles Hodgson (March 1970), "An ISO-Code Representation for ALGOL 68", ALGOL Bulletin, ACM (31): 37–60, AB31.3.6