구문 강조 표시

Syntax highlighting
HTML 구문 강조 표시

구문 강조 표시는 HTML과 같은 프로그래밍, 스크립트 또는 마크업 언어에 사용되는 텍스트 편집기의 기능입니다. 이 기능은 텍스트, 특히 소스 코드를 용어 [1]범주에 따라 다른 색상과 글꼴로 표시합니다.이 기능은 구조 오류와 구문 오류가 시각적으로 구별되므로 프로그래밍 언어나 마크업 언어 등의 구조화된 언어로 쓰기가 용이합니다.이 기능은 또한 많은 프로그래밍 관련 컨텍스트(프로그래밍 매뉴얼 등)에도 사용되며, 독자들이 코드 스니펫을 쉽게 이해할 수 있도록 컬러풀한 서적이나 온라인 웹 사이트의 형태로도 사용됩니다.강조 표시는 텍스트 자체의 의미에 영향을 주지 않으며, 인간 독자만을 대상으로 합니다.

구문 강조 표시는 텍스트 의미의 일부가 아니라 의미를 강화하는 역할을 하기 때문에 보조 표기법의 한 형태입니다.또한 일부 편집자는 구문 강조 표시를 철자 검사 또는 코드 폴딩과 같은 다른 기능과 통합하여 언어 외부 편집을 지원합니다.

실용적인 이점

JavaScript에서 누락된 구분 기호(watch='false 이후)의 효과 강조 표시

구문 강조 표시는 텍스트의 가독성과 컨텍스트(특히 여러 페이지에 걸쳐 있는 코드의 경우)를 개선하기 위한 하나의 전략입니다.독자는 찾고 있는 내용에 따라 코멘트나 코드의 큰 부분을 쉽게 무시할 수 있습니다.구문 강조 표시는 프로그래머가 프로그램에서 오류를 찾는 데에도 도움이 됩니다.예를 들어, 대부분의 편집자는 다른 색상의 문자열 리터럴을 강조 표시합니다.따라서 텍스트의 대비되는 색상으로 인해 누락된 구분 기호를 찾는 것이 훨씬 쉽습니다.브레이스 매칭은 많은 인기 편집자들에게 또 다른 중요한 기능입니다.이렇게 하면 가새 생략 여부를 쉽게 확인할 수 있으며, 다른 색으로 쌍을 강조 표시하여 커서가 있는 가새의 일치를 찾을 수 있습니다.

PPIG 회의에서 발표된 연구는 구문 강조가 짧은 프로그램의 이해에 미치는 영향을 평가하여 구문 강조의 존재가 프로그래머가 프로그램의 [2]의미론을 내재화하는 데 걸리는 시간을 크게 줄인다는 것을 발견했다.또한 연구 중 아이 트래커에서 수집된 데이터에 따르면 구문 강조 표시는 프로그래머가 키워드 등의 표준 구문 구성요소에 덜 집중할 수 있게 합니다.

텍스트 에디터 지원

gedit은 구문 강조 표시를 지원합니다.

일부 텍스트 편집기는 인쇄 또는 워드 프로세싱 및 기타 텍스트 형식 지정 소프트웨어에 적합한 형식으로 컬러 마크업을 내보낼 수도 있습니다. 예를 들어 HTML, 컬러화된 LaTeX, PostScript 또는 RTF 버전의 구문 강조 표시입니다.다른 응용 프로그램에서 사용할 수 있지만 프로그램 자체는 완전하지 않은 여러 구문 강조 라이브러리 또는 "engines"가 있습니다. 예를 들어 PHP용 GeSHI(Generic Syntax Highlighter) 확장입니다.

여러 언어를 지원하는 편집자의 경우 일반적으로 사용자가 텍스트의 언어를 지정할 수 있습니다. 예를 들어 C, LaTeX, HTML 또는 텍스트 편집자는 파일 확장자에 기반하거나 파일 내용을 검색하여 자동으로 인식할 수 있습니다.이 자동 언어 검출은 잠재적인 문제를 나타냅니다.예를 들어, 사용자는 다음을 포함하는 문서를 편집할 수 있습니다.

  • 둘 이상의 언어(예를 들어 내장된 JavaScript 코드가 포함된 HTML 파일을 편집하는 경우),
  • 인식되지 않는 언어(예를 들어 불분명하거나 비교적 새로운 프로그래밍 언어의 소스 코드를 편집할 때),
  • 파일 형식과 다른 언어(예를 들어 파일 확장자를 사용하여 언어를 탐지하는 편집기에서 확장자가 없는 파일의 소스 코드를 편집할 때)

이 경우 사용하는 언어가 명확하지 않고 문서가 강조 표시되지 않거나 잘못 강조 표시될 수 있습니다.

구문 요소

구문 강조 표시가 있는 대부분의 편집기는 수십 개의 다른 어휘 하위 요소에 다른 색상과 텍스트 스타일을 지정할 수 있습니다.여기에는 키워드, 주석, control-flow 문, 변수 및 기타 요소가 포함됩니다.프로그래머들은 종종 코드를 읽기 어렵게 하지 않고 가능한 한 많은 유용한 정보를 보여주기 위해 설정을 크게 맞춤화한다.

구문 장식이라고 불리는 일부 편집자는 특정 구문 요소를 시각적으로 더 즐거운 방법으로 표시하기도 합니다. 예를 들어 다음과 같은 포인터 연산자를 바꿈으로써->소스 코드에서 실제 화살표 기호(→)를 사용하거나 소스 코드 코멘트에서 /etalics/, *boldface*, _underline_과 같은 텍스트 장식 단서를 실제 이탤릭체, 굵은 글씨 또는 밑줄 표시로 변경합니다.

다음은 C 코드의 일부를 비교한 것입니다.

표준 렌더링 구문 강조 표시
/* Hello World */ # include <stdlib >.h> #discl < stdio >h> int main() { printf("Hello World\n"); 0; } 반환
/* Hello World */ #실패하다 <stdlib.h> #실패하다 <stdio.h>  인트 주된() {     인쇄물(헬로 월드\n");     돌아가다 0; } 

다음으로 C++ 코드의 강조 표시된 구문의 다른 일부를 나타냅니다.

// "window_count" 창 개체 만들기: 컨스턴트 자동 window_count(윈도우 카운트) = 인트{10}; 자동 창문들 = 표준::배열< >표준::shared_ptr< >>, max_syslog_count>{}; 위해서 (자동 i = 인트{0}; i < > window_count(윈도우 카운트); ++i) {     창문들[i] = 표준::make_shared(공유)< >>(); } 

C++의 예에서는 에디터가 키워드를 인식하고 있습니다. const,auto,int,그리고.for선두의 코멘트도 작업 코드와 구별하기 위해 특정 방법으로 강조 표시됩니다.

이력 및 제한 사항

구문 강조에 대한 아이디어는 구문 지향 편집자의 아이디어와 상당히 겹칩니다.최초의 코드 편집자 중 한 명은 윌프레드 한센의 1969년 코드 편집자 [3][4]에밀리였다.이것은 고급 언어에 의존하지 않는 코드 완성 기능을 제공했고, 구문 강조 표시가 있는 현대의 편집기와는 달리 구문적으로 잘못된 프로그램을 만드는 것이 사실상 불가능했습니다.

1982년에는 아니타 H. 클록과 1월 B.Chodak은 1983년에 [6]출시된 인텔리비전 ECS(Entertainment Computer System) 주변기기에 사용된 최초의 구문 강조 표시 [5]시스템에 대한 특허를 출원했습니다.BASIC 프로그램의 다양한 요소를 강조하여 초보자들, 특히 어린이들이 코드 작성을 [7]쉽게 시작할 수 있도록 하기 위해 구현되었습니다.이후 1985년 Oxford English Dictionary의 컴퓨터화를 위해 VM 운영체제용으로 작성된 Live Parsing Editor(LEXX)는 색상 구문 강조 표시를 최초로 사용한 것 중 하나입니다.실시간 구문 분석 기능을 통해 텍스트, 프로그램, 데이터 파일 [8]등에 대해 사용자가 제공한 파서를 편집기에 추가할 수 있습니다.마이크로컴퓨터에서 MacPascal 1.0(1985년 10월 10일)은 입력 시 파스칼 구문을 인식하고 흑백 콤팩트 매킨토시의 구문을 강조 표시하기 위해 글꼴 변경(키워드에 굵은 글씨)을 사용했으며 구조에 [9]맞게 코드를 자동으로 입력했습니다.

일부 텍스트 에디터 및 코드 포맷 도구는 가능한 [10]각 언어에 대해 파서를 구현하는 대신 패턴 매칭 휴리스틱스(를 들어 정규 표현)를 사용하여 구문 강조 표시를 수행합니다.이로 인해 텍스트 렌더링 시스템에서 구문이 다소 부정확하게 강조 표시되고 경우에 따라서는 동작이 느려질 수 있습니다.텍스트 편집자가 이 문제를 해결하기 위해 사용하는 솔루션은 파일 전체를 항상 해석하는 것이 아니라 보이는 영역만 해석하는 것입니다.또한 "동기화"를 위해 텍스트에서 제한된 수의 행까지 거꾸로 스캔하는 경우도 있습니다.

한편, 에디터는 작성중에 코드를 표시하는 경우가 많아, 완전하지 않거나 부정확한 경우는, 엄밀한 파서(컴파일러에 사용되는 것과 같은 것)는 대부분의 경우, 코드의 해석에 실패합니다.

텍스트 편집기와는 대조적으로 일부 최신 언어 고유 IDE는 완전한 언어 해석을 수행하므로 코드를 매우 정확하게 이해할 수 있습니다.2009년 David Nolden은 오픈 소스 C++ IDE KDevelop을 위해 구문 강조 표시의 확장을 "의미 강조 표시"라고 불렀습니다.예를 들어, 의미 강조 표시는 코드 이해도를 향상시키기 위해 지역 변수에게 고유한 고유한 색상을 부여할 수 있다.2014년에는 Evan [12]Brooks의 블로그 투고로 컬러 로컬 변수의 아이디어가 더욱 대중화되었고, 그 후 Visual Studio,[13] Xcode [14]등과 같은 다른 인기 IDE로 옮겨졌습니다.

유저 인터페이스의 색채는, 유저가 어느 정도의 색맹이 있는 경우, 그다지 유용하지 않습니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ Jim D'Anjou; Sherry Shavor; Scott Fairbrother; Dan Kehn; John Kellerman; Pat McCarthy (2005). The Java developer's guide to Eclipse (2nd ed.). Boston: Addison-Wesley. ISBN 978-0-321-30502-2.
  2. ^ Sarkar, Advait (2015). "The impact of syntax colouring on program comprehension". Proceedings of the 26th Annual Conference of the Psychology of Programming Interest Group: 49–58. Archived from the original on 24 September 2015. Retrieved 5 September 2015.
  3. ^ Hansen, Wilfred J. (1971). "User engineering principles for interactive systems". Proceedings of the Fall Joint Computer Conference FJCC 39. AFIPS. pp. 5623–532.
  4. ^ Hansen, Wilfred. "Emily - An Editor for Structured Text". Retrieved 17 June 2013.
  5. ^ Syntax error correction method and apparatus, 1982-10-29, retrieved 2018-04-12
  6. ^ Mattel Intellivision: Intellivision Computer Module Owner's Guide (1983)(Mattel)(US). 1983.
  7. ^ "Intellivision Classic Video Game System / Entertainment Computer System". www.intellivisionlives.com. Archived from the original on 2018-07-17. Retrieved 2018-04-12.
  8. ^ Cowlishaw, M. F. (1987). "LEXX – A programmable structured editor" (PDF). IBM Journal of Research and Development, Vol 31, No. 1, IBM Reprint order number G322-0151. IBM.
  9. ^ Allen, Dan (2011-10-10). "A Trio of Historical Recollections". mpw-dev (Mailing list). Archived from the original on 2017-08-21. Retrieved 12 September 2019.
  10. ^ "KEDIT Language Definition Files". Kedit. Mansfield Software Group, Inc. 2012. Retrieved 2016-04-07.
  11. ^ "2009 blog post on Semantic Highlighting introduced in KDevelop by David Nolden".
  12. ^ "2014 blog post on Semantic Highlighting by Evan Brooks".
  13. ^ "Visual Studio Magazine article on semantic highlighting".
  14. ^ "Github page of a plugin which implements semantic highlighting for Xcode".