Zvýraznění syntaxe
Zvýraznění syntaxe je v informatice vlastnost některých textových editorů nebo integrovaných vývojových prostředí (IDE), která programátorům usnadňuje čtení zdrojového kódu tak, že zobrazuje jeho různé části v různé barvě, fontu nebo stylu. Další možná využitelnost zvýraznění syntaxe je na odhalování chyb v syntaxi. Na samotný kód programu nemá zvýrazňování syntaxe žádný vliv.
Některé známé programy podporující tuto vlastnost: editor Vim, PSPad, vývojové prostředí Eclipse, Dev-cpp, komponenta Scintilla, kterou využívají další editory (např. SciTE, Code::Blocks nebo Anjuta) a další.
Praktické možnosti
Zvýrazňování syntaxe je jednou z možností, jak vylepšit čitelnost a podobu textu, obzvláště kódu, který se zobrazuje přes několik stránek. Čtenář má dle libosti jednoduše možnost ignorovat rozsáhlé sekce komentáře nebo kódu.
Zvýrazňování syntaxe také pomáhá programátorům nalézt chyby ve svém programu. Například většina editorů zvýrazňuje znakové řetězce v rozdílných barvách. Nalézt chybějící oddělovač je mnohem jednodušší díky odlišné barvě textu. Párování závorek je dalším důležitým prvkem mnoha oblíbených editorů. Tato možnost ulehčuje zjištění, zda byla závorka vynechána nebo nalézt druhou závorku z páru, pokud se kurzor nachází na jedné z nich a pár je zvýrazněn odlišnou barvou.
Některé editory také mohou exportovat barevné označení ve formátu, který uchovává zvýraznění syntaxe a je vhodný pro tisk nebo import do nějakého programu pro zpracování textu (HTML, LaTeXu, PostScriptu, RTF a podobně).
Třída dokumentu
Pro editory, které podporují více než jeden programovací jazyk, může uživatel jazyk specifikovat (jazyk C, LaTeX, HTML, …), nebo je jazyk textovým editorem automaticky rozpoznán na základě přípony souboru nebo skenováním obsahu souboru.
Jedním z přístupů k podpoře zvýrazňování syntaxe pro více jazyků je užívání „tříd dokumentů“. Každý jednotlivý jazyk představuje jinou třídu dokumentu. Každou třídu lze asociovat se specifickou sadou pravidel barvení syntaxe. Tento přístup umožňuje určitý stupeň flexibility pro vícejazyčné editory, ale jsou zde i potenciální omezení:
- přiřazení jednoho souboru k více než jedné třídě dokumentů (např. při editování HTML souboru, který obsahuje kód Javascript)
- editovat jazyk, který nepatří k žádné rozpoznané třídě (např. při editování zdrojového kódu neznámého nebo relativně nového programovacího jazyka)
Některé vícejazyčné editory, které užívají metodu tříd dokumentů, někdy poskytují dodatečné prvky, které tato omezení řeší.
Prvky syntaxe
Většina editorů při zvýrazňování syntaxe dovoluje, aby byly několika různým slovním dílčím prvkům syntaxe přiděleny různé barevné a textové styly. Ty obsahují klíčová slova, komentáře, řídící struktury, proměnné a další prvky. Programátoři si často přizpůsobují svá nastavení, přičemž se pokouší zobrazit co nejvíce užitečných informací, aniž by příliš zkomplikovali čtení kódu.
Příklad
Níže je uvedena ukázka C++ kódu se zvýrazněním syntaxe:
// Alokace všech oken
for (int i = 0; i < max; i++)
{
wins[i] = new Window();
}
V tomto příkladě rozpoznal editor klíčová slova for
, int
a new
. Komentář na začátku je zvýrazněn zvláštním způsobem, aby byl odlišen od výkonného kódu.
Historie
Jedním z prvních editorů zdrojového kódu byl editor Emily[1][2] vytvořený v roce 1969 Wilfredem Hansenem. Tento editor obsahoval funkce pro dokončování psaného kódu, a to společně se zvýrazněním syntaxe. Tyto doplňky vždy zajistily, aby jakýkoli napsaný kód neobsahoval syntaktické chyby.
V roce 1985 Ben Shneiderman navrhl metodu „barevné rozlišení textových řetězců naznačující jejich význam“,[3] která je popsána například v knize Advances in human-computer interaction. První editor který využíval barevné zvýraznění syntaxe, byl The Live Parsing Editor (LEXX). Ten byl vytvořený v roce 1985 pro operační systém VM a používaný pro přepsání Oxford English Dictionary (česky Oxfordského slovníku angličtiny) do elektronické podoby. Jeho schopnost okamžitého „parsování“ (syntaktické analýzy) umožnila přidání uživatelských nástrojů pro analýzu textu, programů, datových souborů atd.[4]
Dne 10. října 1985 byla implementována syntaktická struktura programovacího jazyka Pascal, díky které byl editor schopen automaticky zvýrazňovat syntaxi kódu již při jeho psaní a byla zde využita například změna fontu písma.[5]
Existuje mnoho textových editorů a nástrojů na formátování zdrojových kódů využívajících různé metody pro vyhledávání textu ke zvýraznění. Většina upřednostňuje využití heuristického prohledávání definovaných vzorů (např. regulární výrazy), oproti využití analyzátoru („parseru“) určeného pro daný programovací jazyk. To může vést k nepřesnému zvýraznění a v některých případech i k pomalejšímu zpracování. Některé textové editory těmto problémům předcházejí tím, že zpracovávají jen aktuálně viditelnou část textu namísto celého souboru a části, které nejsou viditelné, používají pouze k „synchronizaci“.
Některá moderní vývojová prostředí (IDE) zaměřená na konkrétní programovací jazyk obsahují úplné specifikace daného jazyka, a tím zabezpečují bezchybné rozpoznání syntaxe. Díky tomu je výsledný kód přehlednější a srozumitelnější. V dalších letech se metody zvýrazňování syntaxe (např. lokálních proměnných) stávaly více populární a byly implementovány i do moderních vývojových prostředí jako je Microsoft Visual Studio,[6] Xcode,[7] a další.
Reference
- Hansen, Wilfred J. (1971). "User engineering principles for interactive systems". Proceedings of the Fall Joint Computer Conference FJCC 39: 5623–532, AFIPS.
- HANSEN, Wilfred. Emily - An Editor for Structured Text [online]. [cit. 2013-06-17]. Dostupné online. (anglicky)
- SHNEIDERMAN, Ben. Advances in human-computer interaction. Redakce H. Rex Hartson. 2. print.. vyd. Norwood, N.J.: Ablex, 1985. ISBN 0893912441. Kapitola 4.1.1.2, s. 122. (anglicky)
- Cowlishaw, M. F. LEXX – A programmable structured editor [online]. IBM, 1987. Dostupné online. (anglicky)
- ALLEN, Dan. A Trio of Historical Recollections, mpw-dev [online]. 2011-10-10 [cit. 2012-03-11]. Dostupné v archivu pořízeném dne 2014-02-22.
- Visual Studio Magazine article on semantic highlighting [online]. Dostupné online. (anglicky)
- Github page of a plugin which implements semantic highlighting for Xcode [online]. Dostupné online. (anglicky)