맨위로가기

구문 강조

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

구문 강조는 텍스트, 특히 코드의 가독성을 높이기 위해 텍스트 편집기 등에서 사용되는 기능이다. 1980년대 초에 처음 등장했으며, 텍스트의 문법적 요소를 시각적으로 다르게 표현하여 오류를 쉽게 찾고 코드의 이해도를 높이는 데 기여한다. 구문 강조는 텍스트 편집기에서 널리 지원되며, 다양한 언어와 구문 요소에 맞춰 사용자 정의가 가능하다. 하지만 패턴 매칭 방식의 한계로 인해 부정확한 강조 표시가 발생할 수 있으며, 텍스트 전체를 이해하는 것을 방해할 수도 있다.

더 읽어볼만한 페이지

  • 문서 편집기 기능 - 전문 검색
    전문 검색은 문서 내 특정 단어나 구절을 찾는 정보 검색의 핵심 기술로, 인덱싱, 페이지랭크 알고리즘, 문자열 추출 방법, 문서 필터 기술, 질의 도구 개선 등을 통해 발전해왔으며, 웹 검색, 기업용 검색, 데스크톱 검색 등 다양한 분야에서 활용된다.
  • 문서 편집기 기능 - 맞춤법 검사기
    맞춤법 검사기는 텍스트의 오타와 문법 오류를 검사하여 수정 제안을 제공하는 소프트웨어 도구이며, 1970년대에 처음 등장하여 기술 발전을 거쳐 현재 다양한 플랫폼에서 여러 언어를 지원한다.
  • 사용자 인터페이스 기술 - 작업 보기
    작업 보기(Task View)는 윈도우 운영체제에서 창 전환을 용이하게 하는 창 관리 기능으로, 윈도우의 창 전환기, Flip 3D를 거쳐 발전해왔으며, Flip 3D의 단점을 보완하는 응용 프로그램도 존재한다.
  • 사용자 인터페이스 기술 - 모바일 앱
    모바일 앱은 휴대 기기에서 실행되는 애플리케이션으로, 개발 방식에 따라 네이티브 앱, 웹 기반 앱, 하이브리드 앱으로 나뉘며, 사용자 인터페이스 디자인이 중요하고 앱 스토어를 통해 배포되며, 기업은 모바일 애플리케이션 관리를 통해 보안을 강화한다.
구문 강조
개요
이름구문 강조 (Syntax Highlighting)
정의텍스트 편집기, 통합 개발 환경, 웹 서비스 등에서 소스 코드, 마크업 언어 등의 텍스트를 가독성을 높이기 위해 색상 및 글꼴을 사용하여 시각적으로 구분하는 기능
목적코드의 구조 파악, 오류 식별, 가독성 향상
동작 방식
기본 원리텍스트 내의 단어 또는 구문의 종류 (키워드, 변수, 주석 등)를 분석하여 미리 정의된 규칙에 따라 색상, 글꼴 등을 적용
어휘 분석 (Lexical analysis)텍스트를 토큰이라고 하는 의미 있는 단위로 분할
구문 분석 (Syntax analysis)토큰의 순서를 확인하여 언어의 문법 규칙을 준수하는지 확인
강조 표시토큰의 종류와 구문 분석 결과를 기반으로 색상, 글꼴, 스타일 적용
활용 분야
텍스트 편집기 및 IDEEmEditor, Eclipse, Visual Studio Code 등 다양한 텍스트 편집기와 통합 개발 환경에서 코드 가독성을 높이는 데 사용
웹 기반 코드 뷰어GitHub, GitLab 등의 웹 서비스에서 소스 코드를 시각적으로 강조하여 보여주는 데 사용
터미널 에뮬레이터특정 터미널 에뮬레이터는 구문 강조를 지원하여 명령줄 인터페이스에서의 가독성 향상
장점
가독성 향상코드를 더 쉽게 읽고 이해할 수 있도록 도움
오류 감소구문 오류를 더 쉽게 식별하고 수정할 수 있도록 도움
생산성 향상코드 작성 및 디버깅 시간을 단축
구현 방법
정규 표현식텍스트 패턴을 일치시키는 데 사용되는 문자열
어휘 분석기 (Lexer)소스 코드를 토큰으로 분할
구문 분석기 (Parser)토큰 스트림을 기반으로 추상 구문 트리 (Abstract Syntax Tree, AST)를 생성
색상 팔레트다양한 코드 요소에 적용할 색상 집합
관련 기술
렉싱 (Lexing)소스 코드를 토큰 시퀀스로 변환하는 프로세스
파싱 (Parsing)토큰 시퀀스를 기반으로 구문 트리를 구축하는 프로세스
컴파일러 (Compiler)소스 코드를 기계 코드로 변환하는 프로그램
인터프리터 (Interpreter)소스 코드를 한 줄씩 실행하는 프로그램
추가 정보
참고 자료MATLAB 입력 시 구문 검사
관련 링크EmEditor - 새로운 구문 파일 만들기

2. 역사

문법 강조의 개념은 구조 편집기의 개념과 상당 부분 겹친다. 최초의 코드 편집기 중 하나는 1969년 윌프레드 한센(Wilfred Hansen)이 개발한 에밀리(Emily)이다.[23][24] 에밀리는 고급 언어 독립 코드 완성 기능을 제공했지만, 문법 강조 기능이 있는 현대의 편집기들과는 다르게 문법적으로 유효하지 않은 프로그램을 작성하는 것은 불가능했다.

1982년, 아니타 H. 클록과 얀 B. 초닥은 최초의 구문 강조 시스템에 대한 특허를 출원했다.[5] 이 시스템은 1983년에 출시된 인텔리비전의 엔터테인먼트 컴퓨터 시스템(ECS) 주변 장치에 사용되었다.[6] 이 시스템은 BASIC 프로그램의 다양한 요소를 강조 표시하며, 특히 어린이를 포함한 초보자가 코드를 쉽게 작성하도록 돕기 위해 구현되었다.[7] 1985년 벤 슈나이더맨은 "의미를 제시하는 텍스트 문자열의 코드 규칙"을 제안하였다.[25] 같은 해, ''옥스퍼드 영어 사전''의 전산화를 위해 VM 운영 체제용으로 작성된 라이브 파싱 편집기 (LEXX)는 컬러 구문 강조를 사용한 최초의 편집기 중 하나였다. 이 편집기의 ''라이브 파싱'' 기능은 사용자가 제공한 파서가 텍스트, 프로그램, 데이터 파일 등에 대해 편집기에 추가될 수 있도록 했다.[8] 마이크로컴퓨터에서, ''MacPascal 1.0'' (1985년 10월 10일)은 입력되는 대로 파스칼 구문을 인식하고 글꼴 변경(예: 키워드에 굵게)을 사용하여 단색 컴팩트 매킨토시에서 구문을 강조 표시했으며, 구조에 맞게 코드를 자동으로 들여쓰기했다.[9]

3. 실용적 이점

구문 강조는 텍스트, 특히 여러 페이지에 걸쳐 있는 코드의 가독성과 문맥을 개선한다. 독자는 찾고 있는 내용에 따라 주석이나 코드의 큰 부분을 쉽게 무시할 수 있다. 구문 강조는 프로그래머가 프로그램에서 오류를 찾는 데 도움이 된다. 예를 들어, 대부분의 편집기는 문자열 리터럴을 다른 색상으로 강조 표시하여 구분 기호 누락을 쉽게 찾을 수 있게 해준다. 괄호 일치 기능을 통해 괄호가 빠졌는지 확인하거나 커서가 있는 괄호의 일치 항목을 찾아 다른 색상으로 강조 표시할 수도 있다.[2]

PPIG 회의에서 발표된 한 연구에서는 구문 강조가 짧은 프로그램의 이해에 미치는 영향을 평가했는데, 구문 강조가 있을 때 프로그래머가 프로그램의 의미를 내면화하는 데 걸리는 시간을 유의미하게 줄이는 것으로 나타났다. 또한, 연구 중 아이 트래커에서 수집된 데이터에 따르면 구문 강조를 통해 프로그래머가 키워드와 같은 표준 구문 구성 요소에 덜 주의를 기울일 수 있었다.[20]

하지만, 구문 강조로 인해 다음과 같은 단점도 존재한다는 지적도 있다.[21]


  • 훑어보기 쉬워져서 프로그래머가 코드 전체를 이해하려는 노력을 덜 하게 된다.
  • 타이포그래피상의 이유로, 강조 표시된 코드가 실제로는 판독성이 떨어질 수 있다.

4. 텍스트 편집기 지원

일부 텍스트 편집기는 인쇄하거나 워드 프로세싱 및 기타 종류의 텍스트 서식 소프트웨어로 가져오기에 적합한 형식으로 색상 마크업을 내보낼 수 있다. 예를 들어, HTML, 컬러화된 LaTeX, PostScript 또는 RTF 버전의 구문 강조 표시로 내보낼 수 있다. 다른 애플리케이션에서 사용할 수 있지만 그 자체로 완전한 프로그램이 아닌 여러 구문 강조 라이브러리 또는 "엔진"이 있다. 예를 들어 PHP용 Generic Syntax Highlighter (GeSHi) 확장이 있다.[25]

둘 이상의 언어를 지원하는 편집기의 경우, 사용자는 일반적으로 C, LaTeX, HTML과 같은 텍스트의 언어를 지정할 수 있으며, 텍스트 편집기는 파일 확장자를 기반으로 하거나 파일 내용을 스캔하여 자동으로 인식할 수 있다. 이 자동 언어 감지는 잠재적인 문제를 야기한다. 예를 들어, 사용자는 다음을 포함하는 문서를 편집할 수 있다.


  • 둘 이상의 언어 (예: JavaScript 코드가 포함된 HTML 파일을 편집하는 경우)
  • 인식되지 않는 언어 (예: 잘 알려지지 않거나 비교적 새로운 프로그래밍 언어의 소스 코드를 편집하는 경우)
  • 파일 유형과 다른 언어 (예: 언어를 감지하기 위해 파일 확장자를 사용하는 편집기에서 확장자가 없는 파일의 소스 코드를 편집하는 경우)


이러한 경우 어떤 언어를 사용해야 할지 명확하지 않으며, 문서가 강조 표시되지 않거나 잘못 강조 표시될 수 있다.

5. 구문 요소

대부분의 구문 강조 편집기는 키워드, 주석, 제어 흐름 문, 변수 등 구문의 수십 가지 서로 다른 어휘 하위 요소에 대해 다양한 색상과 텍스트 스타일을 허용한다. 프로그래머는 코드를 읽기 어렵게 만들지 않으면서 최대한 많은 유용한 정보를 표시하기 위해 설정을 자주 사용자 정의한다.[2]

일부 편집기는 "구문 장식" 기능을 제공하여 포인터 연산자를 실제 화살표 기호로, 주석의 텍스트 장식 단서(예: /기울임꼴/, *굵게*, 또는 _밑줄_)를 실제 ''기울임꼴'', '''굵게''', 또는 밑줄로 표시하는 등 특정 구문 요소를 시각적으로 더 보기 좋은 방식으로 표현한다.

312px


구문 강조는 텍스트, 특히 여러 페이지에 걸쳐 있는 코드의 가독성과 문맥을 개선하는 한 가지 전략이다. 독자는 찾고 있는 내용에 따라 주석이나 코드의 큰 부분을 쉽게 무시할 수 있다.

또한 구문 강조는 프로그래머가 프로그램에서 오류를 찾는 데 도움을 준다. 예를 들어, 대부분의 편집기는 문자열 리터럴을 다른 색상으로 강조 표시하므로, 텍스트의 대비되는 색상으로 인해 구분 기호 누락을 발견하기가 훨씬 쉽다. 괄호 일치는 많은 인기 있는 편집기에서 또 다른 중요한 기능으로, 괄호가 빠졌는지 쉽게 확인하거나 커서가 있는 괄호의 일치 항목을 다른 색상으로 강조 표시하여 찾을 수 있게 해준다.

PPIG 회의에서 발표된 한 연구에서는 구문 강조가 짧은 프로그램의 이해에 미치는 영향을 평가했는데, 구문 강조가 있을 때 프로그래머가 프로그램의 의미를 내면화하는 데 걸리는 시간을 유의미하게 줄이는 것으로 나타났다.[2] 또한, 연구 중 아이 트래커에서 수집된 데이터에 따르면 구문 강조를 통해 프로그래머가 키워드와 같은 표준 구문 구성 요소에 덜 주의를 기울일 수 있었다.

5. 1. 예제

아래는 C 코드 부분을 비교한 것이다.

표준 렌더링문법 강조



아래는 문법이 강조된 C++ 코드 중 일부를 발췌한 것이다.

// Create "window_count" Window objects:

const auto window_count = int{10};

auto windows = std::array, max_window_count>{};

for (auto i = int{0}; i < window_count; ++i) {

windows[i] = std::make_shared();

}

다음은 코드 조각 C 언어 코드의 비교이다.

표준 렌더링구문 강조



다음은 구문 강조된 또 다른 C++ 코드 조각이다.

// Create "window_count" Window objects:

const auto window_count = int{10};

auto windows = std::array, max_window_count>{};

for (auto i = int{0}; i < window_count; ++i) {

windows[i] = std::make_shared();

}

C++ 예제에서 편집기는 키워드 const, auto, intfor를 인식했다. 시작 부분의 주석도 작동하는 코드와 구별하기 위해 특정 방식으로 강조 표시된다.

다음은 C++ 코드를 구문 강조한 것이다.

// Allocate all the windows

for (int i = 0; i < max; i++)

{

wins[i] = new Window();

}

이 예시에서는 소프트웨어가 키워드(예약어)로 for, int, new를, 변수명으로 i, wins, max를 판별하여 서로 다른 색으로 강조 표시한다. 첫 번째 줄의 주석도 코드 부분과 구별할 수 있도록 강조 표시된다.

6. 한계

일부 텍스트 편집기와 코드 서식 도구는 각 가능한 언어에 대한 파서를 구현하는 대신 패턴 매칭 휴리스틱 (예: 정규 표현식)을 사용하여 구문 강조를 수행한다.[10] 이로 인해 부정확한 구문 강조 및 속도 저하가 발생할 수 있다. 텍스트 편집기가 이 문제를 해결하기 위해 사용하는 해결책은 보이는 영역만 파싱하는 것이며, 때로는 "동기화"를 위해 텍스트에서 제한된 수의 줄까지 뒤로 스캔하기도 한다.

편집기는 종종 코드가 완성되지 않았거나 잘못된 상태에서 코드를 표시하며, 엄격한 파서(컴파일러에서 사용되는 것과 같은)는 대부분의 경우 코드를 파싱하는 데 실패한다.

일부 최신 언어별 IDE (텍스트 편집기와 대조적으로)는 코드에 대한 매우 정확한 이해를 제공하는 전체 언어 파싱을 수행한다. 의미론적 강조는 지역 변수에 고유한 개별 색상을 제공하여 코드 이해도를 높일 수 있다. (KDevelop|케 ডেভেলপ영어, Visual Studio|비주얼 스튜디오영어, Xcode|엑스코드영어 등에서 사용) 사용자가 색맹을 가지고 있다면 사용자 인터페이스의 색상은 덜 유용할 수 있다.

참조

[1] 서적 The Java developer's guide to Eclipse Addison-Wesley 2005
[2] 간행물 The impact of syntax colouring on program comprehension https://ppig.org/pap[...] 2015
[3] 콘퍼런스 User engineering principles for interactive systems AFIPS
[4] 웹사이트 Emily - An Editor for Structured Text https://www.cs.cmu.e[...] 2013-06-17
[5] Citation Syntax error correction method and apparatus https://patents.goog[...] 1982-10-29
[6] 서적 Mattel Intellivision: Intellivision Computer Module Owner's Guide (1983)(Mattel)(US) https://archive.org/[...] 1983
[7] 웹사이트 Intellivision Classic Video Game System / Entertainment Computer System http://www.intellivi[...] 2018-04-12
[8] 웹사이트 LEXX – A programmable structured editor http://www.research.[...] IBM 1987
[9] mailing list A Trio of Historical Recollections https://lists.apple.[...] 2011-10-10
[10] 웹사이트 KEDIT Language Definition Files http://www.kedit.com[...] Mansfield Software Group, Inc. 2016-04-07
[11] 웹사이트 2009 blog post on Semantic Highlighting introduced in KDevelop by David Nolden http://zwabel.wordpr[...] 2009-01-08
[12] 웹사이트 2014 blog post on Semantic Highlighting by Evan Brooks https://medium.com/@[...] 2017-04-17
[13] 웹사이트 Visual Studio Magazine article on semantic highlighting http://visualstudiom[...]
[14] 웹사이트 Github page of a plugin which implements semantic highlighting for Xcode https://github.com/k[...] 2022-09-14
[15] 웹사이트 入力時の構文チェック - MATLAB & Simulink - MathWorks 日本 https://jp.mathworks[...] MathWorks, Inc. 2018-08-24
[16] 웹사이트 EmEditor 使い方: 新しい構文ファイルを作成するには http://www.emeditor.[...] Emurasoft, Inc. 2018-08-24
[17] 웹사이트 IBM Knowledge Center - COBOL、JCL、PL/I、アセンブラー、および C++ ファイルの編集 https://www.ibm.com/[...] IBM Corporation 2018-08-24
[18] 웹사이트 世界最速「さくさくエディタ」 http://vivi.dyndns.o[...] 2018-08-24
[19] 웹사이트 Sun[tm] ONE Studio 4 update 1, Mobile Edition リリースノート https://docs.oracle.[...] 2019-08-29
[20] 간행물 シンタックスに色付けするとプログラム理解にどう影響するか [The impact of syntax colouring on program comprehension] http://www.ppig.org/[...]
[21] 웹사이트 シンタックス強調表示の不利な事例 [A case against syntax highlighting] http://www.linusakes[...] 2007-08-28
[22] 문서 LEXX – A programmable structured editor http://www.research.[...] IBM Journal of Research and Development 1987
[23] 콘퍼런스 User engineering principles for interactive systems AFIPS
[24] 웹인용 Emily - An Editor for Structured Text http://www.cs.cmu.ed[...] 2013-06-17
[25] 서적 Advances in human-computer interaction Ablex



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com