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.[1] 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
[redigera | redigera wikitext]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.[2] 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
[redigera | redigera wikitext]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
[redigera | redigera wikitext]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
[redigera | redigera wikitext]Nedan följer en jämförelse av ett stycke C-kod:
Utan syntaxmarkering | Med syntaxmarkering |
---|---|
/* Hello World */
#include <stdlib.h>
#include <stdio.h>
int main()
{
printf("Hello World\n");
return 0;
}
|
/* Hello World */
#include <stdlib.h>
#include <stdio.h>
int main()
{
printf("Hello World\n");
return 0;
}
|
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
[redigera | redigera wikitext]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.[3][4] 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,[5] som användes i Intellivision's Entertainment Computer System (ECS), som släpptes 1983.[6] 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.[7] 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.[8] 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.[9]
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.[10] 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"[11] 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,[12] och därefter implementerades idés i andra populära IDE:er, såsom Visual Studio,[13] och Xcode[14].
Referenser
[redigera | redigera wikitext]- ^ Se t.ex. Java Developer's Guide to Eclipse av Jim D'Anjou, Sherry Shavor, Scott Fairbrother, Dan Kehn, John Kellerman, Pat McCarthy Publicerad av Addison-Wesley, 2004
- ^ Sarkar, Advait (2015). ”The impact of syntax colouring on program comprehension”. Proceedings of the 26th Annual Conference of the Psychology of Programming Interest Group: sid. 49–58. http://www.ppig.org/library/paper/impact-syntax-colouring-program-comprehension. Läst 5 september 2015. Arkiverad 24 september 2015 hämtat från the Wayback Machine. ”Arkiverade kopian”. Arkiverad från originalet den 24 september 2015. https://web.archive.org/web/20150924080735/http://www.ppig.org/library/paper/impact-syntax-colouring-program-comprehension. Läst 23 mars 2019.
- ^ Hansen, Wilfred J.. "User engineering principles for interactive systems". {{{booktitle}}}.
- ^ Hansen, Wilfred. ”Emily - An Editor for Structured Text”. Emily - An Editor for Structured Text. http://www.cs.cmu.edu/~wjh/Emily.html. Läst 17 juni 2013.
- ^ Syntax error correction method and apparatus, https://patents.google.com/patent/US4617643A/en, läst 12 april 2018
- ^ Mattel Intellivision: Intellivision Computer Module Owner's Guide (1983)(Mattel)(US). https://archive.org/details/Intellivision_Computer_Module_Owners_Guide_1983_Mattel_US
- ^ ”Intellivision Classic Video Game System / Entertainment Computer System”. www.intellivisionlives.com. Arkiverad från originalet den 2018-07-17. https://web.archive.org/web/20180717123313/http://www.intellivisionlives.com/bluesky/hardware/ecs_tech.html. Läst 23 mars 2019. Arkiverad 17 juli 2018 hämtat från the Wayback Machine. ”Arkiverade kopian”. Arkiverad från originalet den 17 juli 2018. https://web.archive.org/web/20180717123313/http://www.intellivisionlives.com/bluesky/hardware/ecs_tech.html. Läst 23 mars 2019.
- ^ ”LEXX – A programmable structured editor”. IBM Journal of Research and Development, Vol 31, No. 1, IBM Reprint order number G322-0151. http://www.research.ibm.com/journal/rd/311/ibmrd3101G.pdf.
- ^ ”A Trio of Historical Recollections”. Arkiverad från originalet den 22 februari 2014. https://web.archive.org/web/20140222151616/http://lists.apple.com/archives/mpw-dev/2011/Oct/msg00000.html. Arkiverad 22 februari 2014 hämtat från the Wayback Machine. ”Arkiverade kopian”. Arkiverad från originalet den 22 februari 2014. https://web.archive.org/web/20140222151616/http://lists.apple.com/archives/mpw-dev/2011/Oct/msg00000.html. Läst 23 mars 2019.
- ^ ”KEDIT Language Definition Files”. Kedit. http://www.kedit.com/wwkld.html.
- ^ ”2009 blog post on Semantic Highlighting introduced in KDevelop by David Nolden”. 2009 blog post on Semantic Highlighting introduced in KDevelop by David Nolden. http://zwabel.wordpress.com/2009/01/08/c-ide-evolution-from-syntax-highlighting-to-semantic-highlighting/.
- ^ ”2014 blog post on Semantic Highlighting by Evan Brooks”. 2014 blog post on Semantic Highlighting by Evan Brooks. https://medium.com/@evnbr/coding-in-color-3a6db2743a1e.
- ^ ”Visual Studio Magazine article on semantic highlighting”. Visual Studio Magazine article on semantic highlighting. http://visualstudiomagazine.com/articles/2014/08/01/semantic-code-highlighting.aspx.
- ^ ”Github page of a plugin which implements semantic highlighting for Xcode”. Github page of a plugin which implements semantic highlighting for Xcode. https://github.com/kolinkrewinkel/Polychromatic.