Syntaxmarkering

Syntaxmarkering är en funktion i textredigerare som används för programmering, skript eller märkspråk, exempelvis HTML. Funktionen visar text, särskilt källkod, i olika färger och teckensnitt enligt kategorin av termer.  Den här funktionen underlättar redigering i ett strukturerat språk som ett programspråk eller ett märkspråk eftersom både strukturer och syntaxfel är framgår visuellt. Syntaxmarkeringen påverkar inte betydelsen av själva texten, utan är endast avsedd för underlätta för mänskliga läsare. 

Vissa textredigerare integrerar också syntaxmarkering med andra funktioner, såsom stavningskontroll eller hopfällning av kod.

Praktiska fördelar 
[[Fil:Syntax-highlighting-javascript.gif|höger|miniatyr|312x312px| Visar hur en saknad avgränsare (efter watch='false''') påverkar syntaxmarkering i Javascript ]]
Syntaxmarkering är ett sätt att förbättra läsbarheten och förståelsen för sammanhanget i texten, särskilt för kod som sträcker sig över flera sidor. Läsaren kan enkelt ignorera stora sjok kommentarer eller kod, beroende på vad hen letar efter. Syntaxmarkering hjälper också programmerare att hitta fel i sitt program. Till exempel markerar de flesta textredigerare strängkonstanter i en annan färg. Följaktligen är det mycket enklare att upptäcka en saknad avgränsare tack vare färgkontrasten. Matchning av parenteser är en annan viktig funktion i många populära textredigerare. Detta gör det enkelt att se om en parentes har utelämnats eller att hitta en matchande parentes till den parentes som markören står på. 

En studie publicerad till konferensen PPIG utvärderade effekterna av syntaxmarkering på förståelsen av korta program och fann att syntaxmarkering avsevärt minskar den tid det tar för en programmerare att förstå semantiken i ett program. Dessutom antydde data som samlats vid blickspårning under studien att syntaxmarkering gör det möjligt för programmerare att lägga mindre uppmärksamhet på vanliga syntaktiska komponenter såsom nyckelord. 

 Stöd i textredigerare 
Vissa textredigerare kan även exportera den färglagda koden till ett format som är lämpligt för utskrift eller för import till ordbehandlare och andra typer av textformateringsprogram, till exempel som en HTML-, färgad LaTeX-, PostScript eller RTF-version. Det finns flera bibliotek eller "motorer" för syntaxmarkering, som kan användas i andra applikationer, men inte själva är kompletta program, såsom Generic Syntax Highlighter (GeSHi). 

För textredigerare som stöder mer än ett språk kan användaren vanligtvis ange vilket språk koden är skriven i, exempelvis C, LaTeX, HTML. Textredigeraren kan normalt även automatiskt identifiera språket utifrån filändelsen eller genom att skanna innehållet i filen. Denna automatiska språkidentifiering utgör också potentiella problem. Till exempel kan en användare redigera ett dokument som innehåller: 

 mer än ett språk (till exempel en HTML-fil som innehåller inbäddad JavaScript-kod), 
 ett språk som inte känns igen (till exempel ett obskyrt eller relativt nytt programspråk), 
 ett språk som skiljer sig från filtypen (till exempel när filen saknar filändelse i en textredigerare som använder filändelser för att identifiera språket). 

I dessa fall är det inte klart vilket språk som ska användas, och dokumentet kanske inte får någon syntaxmarkering eller markeras felaktigt. 

 Syntaxelement 
De flesta textredigerare med syntaxmarkering stödjer ger olika färger och textstilar till ett stort antal olika lexikala delelement i syntaxen. Nyckelord, kommentarer, programflöde och variabler är exempel på dessa delelement. Programmerare vill ofta visa så mycket användbar information som möjligt utan att göra koden svår att läsa. 

 Exempel 
Nedan följer en jämförelse av ett stycke C-kod: 

Nedan följer ett annat stycke syntaxmarkerad C++-kod: // Skapa "window_count" Window-objekt:
const auto window_count = int{10};
auto windows = std::array<std::shared_ptr<Window>, max_window_count>{};
for (auto i = int{0}; i < window_count; ++i) {
    windows[i] = std::make_shared<Window>();
} I C++-exemplet har textredigeraren identifierat nyckelorden auto, const, int och for. Kommentaren i början har fått en annan färg och stil för att särskilja den. 

 Historik och begränsningar 
Idén med syntaxmarkering överlappar med syntaxinriktade redigerare. En av de första sådana redigerarna för kod var Wilfred Hansens kodredigerare från 1969, Emily. Verktyget tillhandahöll avancerade språkoberoende textförslag, och till skillnad från moderna textredigerare med syntaxmarkering, gjorde verktyget det omöjligt att skapa synaktiskt felaktiga program. 

År 1982 tog Anita H. Klock och Jan B. Chodak patent på det första kända syntaxmarkeringssystemet, som användes i Intellivision's Entertainment Computer System (ECS), som släpptes 1983. Systemet markerade olika element i BASIC-program och implementerades för att underlätta för nybörjare, särskilt barn, att börja skriva kod. Senare var Live Parsing Editor (LEXX) en av de första textredigerarna med stöd för syntaxmarkering med färg, skriven för operativsystemet VM för datoriseringen av Oxford English Dictionary 1985. Dess live parsing-kapacitet lät användaren tillhandahålla parsers åt textredigeraren, för text, program, datafiler etc. På mikrodatorer kunde MacPascal 1.0 (10 oktober 1985) känna igen Pascal-syntax medan den skrevs och använde teckensnittsändringar (t.ex. fetstil för nyckelord) för att markera syntax på den monokroma kompakta Macintosh-datorn och drog automatiskt in koden för att matcha strukturen. 

Vissa textredigerare och verktyg för kodformatering utför syntaxmarkering med hjälp av mönstermatchande heuristik (t.ex. reguljära uttryck) istället för att implementera en parser för varje språk. Detta kan leda till en något felaktig syntaxmarkering och i vissa fall till dålig prestanda. En lösning för att komma till rätta med prestandaproblemet är att inte parsa hela filen, utan endast det synliga området, och ibland skanna ett begränsat antal rader bakåt i texten för att "synkronisera". 

Å andra sidan visar textredigeraren ofta kod medan koden skapas, alltså medan den är ofullständig eller felaktig, och de strikta parsrarna (som de som används i kompilatorer) skulle oftast misslyckas med att analysera koden. 

Vissa moderna, språkspecifika IDE:er (i kontrast till textredigerare) utför full språkparsning, vilket ger mycket korrekt tolkning av kod. Ett tillägg till syntaxmarkering beskrevs 2009 av David Nolden som "semantisk markering"'' till C++-IDE:n KDevelop. Semantisk markering kan exempelvis ge lokala variabler unika, tydliga färger för att underlätta förståelse av koden. I 2014 blev idén om färgade lokala variabler populärare genom ett blogginlägg av Evan Brooks, och därefter implementerades idés i andra populära IDE:er, såsom Visual Studio, och Xcode.

Referenser 

Textredigerare

Sidor med ogranskade översättningar