Hoppa till innehållet

Syntaxmarkering

Från Wikipedia
Syntaxmarkering avHTML

Syntaxmarkeringär en funktion itextredigeraresom används förprogrammering,skriptellermärkspråk,exempelvisHTML.Funktionen visar text, särskiltkällkod,i olika färger ochteckensnittenligt kategorin av termer.[1]Den här funktionen underlättar redigering i ett strukturerat språk som ettprogramspråkeller ettmärkspråkeftersom både strukturer ochsyntaxfelä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åsomstavningskontrollellerhopfällning av kod.

Praktiska fördelar

[redigera|redigera wikitext]
Visar hur en saknad avgränsare (efterwatch='false') påverkar syntaxmarkering iJavascript

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 textredigeraresträngkonstanteri 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 konferensenPPIGutvä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 vidblickspårningunder 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-,PostScriptellerRTF-version.Det finns flerabibliotekeller "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, exempelvisC,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 enHTML-filsom innehåller inbäddadJavaScript-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.

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.

Nedan följer en jämförelse av ett styckeC-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>

intmain()
{
printf("Hello World\n");
return0;
}

Nedan följer ett annat stycke syntaxmarkeradC++-kod:

// Skapa "window_count" Window-objekt:
constautowindow_count=int{10};
autowindows=std::array<std::shared_ptr<Window>,max_window_count>{};
for(autoi=int{0};i<window_count;++i){
windows[i]=std::make_shared<Window>();
}

IC++-exemplethar textredigeraren identifierat nyckelordenauto,const,intochfor.Kommentareni 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 iIntellivision'sEntertainment 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 operativsystemetVMför datoriseringen avOxford English Dictionary1985. Desslive parsing-kapacitet lät användaren tillhandahålla parsers åt textredigeraren, för text, program, datafiler etc.[8]mikrodatorerkundeMacPascal 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 avmönstermatchandeheuristik(t.ex.reguljära uttryck) istället för att implementera enparserfö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åkspecifikaIDE: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:nKDevelop.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åsomVisual Studio,[13]ochXcode[14].

  1. ^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
  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:sid. 49–58.http://www.ppig.org/library/paper/impact-syntax-colouring-program-comprehension.Läst 5 september 2015.Arkiverad24 september 2015 hämtat från theWayback Machine.”Arkiverade kopian”.Arkiverad frånoriginaletden 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.
  3. ^Hansen, Wilfred J.. "User engineering principles for interactive systems".{{{booktitle}}}.
  4. ^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.
  5. ^Syntax error correction method and apparatus,https://patents.google.com/patent/US4617643A/en,läst 12 april 2018
  6. ^Mattel Intellivision: Intellivision Computer Module Owner's Guide (1983)(Mattel)(US).https://archive.org/details/Intellivision_Computer_Module_Owners_Guide_1983_Mattel_US
  7. ^”Intellivision Classic Video Game System / Entertainment Computer System”.www.intellivisionlives.com.Arkiverad frånoriginaletden 2018-07-17.https://web.archive.org/web/20180717123313/http://www.intellivisionlives.com/bluesky/hardware/ecs_tech.html.Läst 23 mars 2019.Arkiverad17 juli 2018 hämtat från theWayback Machine.”Arkiverade kopian”.Arkiverad frånoriginaletden 17 juli 2018.https://web.archive.org/web/20180717123313/http://www.intellivisionlives.com/bluesky/hardware/ecs_tech.html.Läst 23 mars 2019.
  8. ^”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.
  9. ^”A Trio of Historical Recollections”.Arkiverad frånoriginaletden 22 februari 2014.https://web.archive.org/web/20140222151616/http://lists.apple.com/archives/mpw-dev/2011/Oct/msg00000.html.Arkiverad22 februari 2014 hämtat från theWayback Machine.”Arkiverade kopian”.Arkiverad frånoriginaletden 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.
  10. ^”KEDIT Language Definition Files”.Kedit.http://www.kedit.com/wwkld.html.
  11. ^”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/.
  12. ^”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.
  13. ^”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.
  14. ^”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.